Convert ASN.1 dissectors to use filterable expert info.
[metze/wireshark/wip.git] / epan / dissectors / packet-camel.c
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 /* ../../tools/asn2wrs.py -b -L -p camel -c ./camel.cnf -s ./packet-camel-template -D . -O ../../epan/dissectors 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 */
5
6 /* Input file: packet-camel-template.c */
7
8 #line 1 "../../asn1/camel/packet-camel-template.c"
9 /* packet-camel-template.c
10  * Routines for Camel
11  * Copyright 2004, Tim Endean <endeant@hotmail.com>
12  * Copyright 2005, Olivier Jacques <olivier.jacques@hp.com>
13  * Copyright 2005, Javier Acuna <javier.acuna@sixbell.com>
14  * Updated to ETSI TS 129 078 V6.4.0 (2004-3GPP TS 29.078 version 6.4.0 Release 6 1 12)
15  * Copyright 2005-2010, Anders Broman <anders.broman@ericsson.com>
16  * Updated to 3GPP TS 29.078 version 7.3.0 Release 7 (2006-06)
17  * Built from the gsm-map dissector Copyright 2004, Anders Broman <anders.broman@ericsson.com>
18  *
19  * $Id$
20  *
21  * Wireshark - Network traffic analyzer
22  * By Gerald Combs <gerald@wireshark.org>
23  * Copyright 1998 Gerald Combs
24  *
25  * This program is free software; you can redistribute it and/or
26  * modify it under the terms of the GNU General Public License
27  * as published by the Free Software Foundation; either version 2
28  * of the License, or (at your option) any later version.
29  *
30  * This program is distributed in the hope that it will be useful,
31  * but WITHOUT ANY WARRANTY; without even the implied warranty of
32  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
33  * GNU General Public License for more details.
34  *
35  * You should have received a copy of the GNU General Public License
36  * along with this program; if not, write to the Free Software
37  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
38  * References: ETSI 300 374
39  */
40 /*
41  * Indentation logic: this file is indented with 2 spaces indentation.
42  *                    there are no tabs.
43  */
44 #include "config.h"
45
46 #include <glib.h>
47 #include <epan/packet.h>
48 #include <epan/prefs.h>
49 #include <epan/oids.h>
50 #include <epan/tap.h>
51 #include <epan/asn1.h>
52 #include <epan/expert.h>
53
54 #include <string.h>
55
56 #include "packet-ber.h"
57 #include "packet-camel.h"
58 #include "packet-q931.h"
59 #include "packet-e164.h"
60 #include "packet-isup.h"
61 #include "packet-gsm_map.h"
62 #include "packet-gsm_a_common.h"
63 #include "packet-inap.h"
64 #include "packet-tcap.h"
65 #include <epan/camel-persistentdata.h>
66 #include <epan/tcap-persistentdata.h>
67
68 #define PNAME  "Camel"
69 #define PSNAME "CAMEL"
70 #define PFNAME "camel"
71
72 /* Initialize the protocol and registered fields */
73 static int proto_camel = -1;
74 int date_format = 1; /*assume european date format */
75 int camel_tap = -1;
76 /* Global variables */
77 static guint32 opcode=0;
78 static guint32 errorCode=0;
79 static guint32 camel_ver = 0;
80 /* ROSE context */
81 static rose_ctx_t camel_rose_ctx;
82
83 static int hf_digit = -1;
84 static int hf_camel_extension_code_local = -1;
85 static int hf_camel_error_code_local = -1;
86 static int hf_camel_cause_indicator = -1;
87 static int hf_camel_PDPTypeNumber_etsi = -1;
88 static int hf_camel_PDPTypeNumber_ietf = -1;
89 static int hf_camel_PDPAddress_IPv4 = -1;
90 static int hf_camel_PDPAddress_IPv6 = -1;
91 static int hf_camel_cellGlobalIdOrServiceAreaIdFixedLength = -1;
92 static int hf_camel_RP_Cause = -1;
93 static int hf_camel_CAMEL_AChBillingChargingCharacteristics = -1;
94 static int hf_camel_CAMEL_FCIBillingChargingCharacteristics = -1;
95 static int hf_camel_CAMEL_FCIGPRSBillingChargingCharacteristics = -1;
96 static int hf_camel_CAMEL_FCISMSBillingChargingCharacteristics = -1;
97 static int hf_camel_CAMEL_SCIBillingChargingCharacteristics = -1;
98 static int hf_camel_CAMEL_SCIGPRSBillingChargingCharacteristics = -1;
99 static int hf_camel_CAMEL_CallResult = -1;
100
101 /* Used by camel-persistentdata.c */
102 int hf_camelsrt_SessionId=-1;
103 int hf_camelsrt_RequestNumber=-1;
104 int hf_camelsrt_Duplicate=-1;
105 int hf_camelsrt_RequestFrame=-1;
106 int hf_camelsrt_ResponseFrame=-1;
107 int hf_camelsrt_DeltaTime=-1;
108 int hf_camelsrt_SessionTime=-1;
109 int hf_camelsrt_DeltaTime31=-1;
110 int hf_camelsrt_DeltaTime75=-1;
111 int hf_camelsrt_DeltaTime65=-1;
112 int hf_camelsrt_DeltaTime22=-1;
113 int hf_camelsrt_DeltaTime35=-1;
114 int hf_camelsrt_DeltaTime80=-1;
115
116
117 /*--- Included file: packet-camel-hf.c ---*/
118 #line 1 "../../asn1/camel/packet-camel-hf.c"
119 static int hf_camel_PAR_cancelFailed_PDU = -1;    /* PAR_cancelFailed */
120 static int hf_camel_PAR_requestedInfoError_PDU = -1;  /* PAR_requestedInfoError */
121 static int hf_camel_UnavailableNetworkResource_PDU = -1;  /* UnavailableNetworkResource */
122 static int hf_camel_PAR_taskRefused_PDU = -1;     /* PAR_taskRefused */
123 static int hf_camel_CAP_GPRS_ReferenceNumber_PDU = -1;  /* CAP_GPRS_ReferenceNumber */
124 static int hf_camel_PlayAnnouncementArg_PDU = -1;  /* PlayAnnouncementArg */
125 static int hf_camel_PromptAndCollectUserInformationArg_PDU = -1;  /* PromptAndCollectUserInformationArg */
126 static int hf_camel_ReceivedInformationArg_PDU = -1;  /* ReceivedInformationArg */
127 static int hf_camel_SpecializedResourceReportArg_PDU = -1;  /* SpecializedResourceReportArg */
128 static int hf_camel_ApplyChargingArg_PDU = -1;    /* ApplyChargingArg */
129 static int hf_camel_ApplyChargingReportArg_PDU = -1;  /* ApplyChargingReportArg */
130 static int hf_camel_AssistRequestInstructionsArg_PDU = -1;  /* AssistRequestInstructionsArg */
131 static int hf_camel_CallGapArg_PDU = -1;          /* CallGapArg */
132 static int hf_camel_CallInformationReportArg_PDU = -1;  /* CallInformationReportArg */
133 static int hf_camel_CallInformationRequestArg_PDU = -1;  /* CallInformationRequestArg */
134 static int hf_camel_CancelArg_PDU = -1;           /* CancelArg */
135 static int hf_camel_CollectInformationArg_PDU = -1;  /* CollectInformationArg */
136 static int hf_camel_ConnectArg_PDU = -1;          /* ConnectArg */
137 static int hf_camel_ConnectToResourceArg_PDU = -1;  /* ConnectToResourceArg */
138 static int hf_camel_ContinueWithArgumentArg_PDU = -1;  /* ContinueWithArgumentArg */
139 static int hf_camel_DisconnectForwardConnectionWithArgumentArg_PDU = -1;  /* DisconnectForwardConnectionWithArgumentArg */
140 static int hf_camel_DisconnectLegArg_PDU = -1;    /* DisconnectLegArg */
141 static int hf_camel_EntityReleasedArg_PDU = -1;   /* EntityReleasedArg */
142 static int hf_camel_EstablishTemporaryConnectionArg_PDU = -1;  /* EstablishTemporaryConnectionArg */
143 static int hf_camel_EventReportBCSMArg_PDU = -1;  /* EventReportBCSMArg */
144 static int hf_camel_FurnishChargingInformationArg_PDU = -1;  /* FurnishChargingInformationArg */
145 static int hf_camel_InitialDPArg_PDU = -1;        /* InitialDPArg */
146 static int hf_camel_InitiateCallAttemptArg_PDU = -1;  /* InitiateCallAttemptArg */
147 static int hf_camel_InitiateCallAttemptRes_PDU = -1;  /* InitiateCallAttemptRes */
148 static int hf_camel_MoveLegArg_PDU = -1;          /* MoveLegArg */
149 static int hf_camel_PlayToneArg_PDU = -1;         /* PlayToneArg */
150 static int hf_camel_ReleaseCallArg_PDU = -1;      /* ReleaseCallArg */
151 static int hf_camel_RequestReportBCSMEventArg_PDU = -1;  /* RequestReportBCSMEventArg */
152 static int hf_camel_ResetTimerArg_PDU = -1;       /* ResetTimerArg */
153 static int hf_camel_SendChargingInformationArg_PDU = -1;  /* SendChargingInformationArg */
154 static int hf_camel_SplitLegArg_PDU = -1;         /* SplitLegArg */
155 static int hf_camel_ApplyChargingGPRSArg_PDU = -1;  /* ApplyChargingGPRSArg */
156 static int hf_camel_ApplyChargingReportGPRSArg_PDU = -1;  /* ApplyChargingReportGPRSArg */
157 static int hf_camel_CancelGPRSArg_PDU = -1;       /* CancelGPRSArg */
158 static int hf_camel_ConnectGPRSArg_PDU = -1;      /* ConnectGPRSArg */
159 static int hf_camel_ContinueGPRSArg_PDU = -1;     /* ContinueGPRSArg */
160 static int hf_camel_EntityReleasedGPRSArg_PDU = -1;  /* EntityReleasedGPRSArg */
161 static int hf_camel_EventReportGPRSArg_PDU = -1;  /* EventReportGPRSArg */
162 static int hf_camel_FurnishChargingInformationGPRSArg_PDU = -1;  /* FurnishChargingInformationGPRSArg */
163 static int hf_camel_InitialDPGPRSArg_PDU = -1;    /* InitialDPGPRSArg */
164 static int hf_camel_ReleaseGPRSArg_PDU = -1;      /* ReleaseGPRSArg */
165 static int hf_camel_RequestReportGPRSEventArg_PDU = -1;  /* RequestReportGPRSEventArg */
166 static int hf_camel_ResetTimerGPRSArg_PDU = -1;   /* ResetTimerGPRSArg */
167 static int hf_camel_SendChargingInformationGPRSArg_PDU = -1;  /* SendChargingInformationGPRSArg */
168 static int hf_camel_ConnectSMSArg_PDU = -1;       /* ConnectSMSArg */
169 static int hf_camel_EventReportSMSArg_PDU = -1;   /* EventReportSMSArg */
170 static int hf_camel_FurnishChargingInformationSMSArg_PDU = -1;  /* FurnishChargingInformationSMSArg */
171 static int hf_camel_InitialDPSMSArg_PDU = -1;     /* InitialDPSMSArg */
172 static int hf_camel_ReleaseSMSArg_PDU = -1;       /* ReleaseSMSArg */
173 static int hf_camel_RequestReportSMSEventArg_PDU = -1;  /* RequestReportSMSEventArg */
174 static int hf_camel_ResetTimerSMSArg_PDU = -1;    /* ResetTimerSMSArg */
175 static int hf_camel_CAP_U_ABORT_REASON_PDU = -1;  /* CAP_U_ABORT_REASON */
176 static int hf_camel_legID = -1;                   /* LegID */
177 static int hf_camel_srfConnection = -1;           /* CallSegmentID */
178 static int hf_camel_aOCInitial = -1;              /* CAI_GSM0224 */
179 static int hf_camel_aOCSubsequent = -1;           /* AOCSubsequent */
180 static int hf_camel_cAI_GSM0224 = -1;             /* CAI_GSM0224 */
181 static int hf_camel_aocSubsequent_tariffSwitchInterval = -1;  /* INTEGER_1_86400 */
182 static int hf_camel_audibleIndicatorTone = -1;    /* BOOLEAN */
183 static int hf_camel_burstList = -1;               /* BurstList */
184 static int hf_camel_conferenceTreatmentIndicator = -1;  /* OCTET_STRING_SIZE_1 */
185 static int hf_camel_callCompletionTreatmentIndicator = -1;  /* OCTET_STRING_SIZE_1 */
186 static int hf_camel_calledAddressValue = -1;      /* Digits */
187 static int hf_camel_gapOnService = -1;            /* GapOnService */
188 static int hf_camel_calledAddressAndService = -1;  /* T_calledAddressAndService */
189 static int hf_camel_serviceKey = -1;              /* ServiceKey */
190 static int hf_camel_callingAddressAndService = -1;  /* T_callingAddressAndService */
191 static int hf_camel_callingAddressValue = -1;     /* Digits */
192 static int hf_camel_eventTypeBCSM = -1;           /* EventTypeBCSM */
193 static int hf_camel_monitorMode = -1;             /* MonitorMode */
194 static int hf_camel_dpSpecificCriteria = -1;      /* DpSpecificCriteria */
195 static int hf_camel_automaticRearm = -1;          /* NULL */
196 static int hf_camel_cause = -1;                   /* Cause */
197 static int hf_camel_bearerCap = -1;               /* T_bearerCap */
198 static int hf_camel_numberOfBursts = -1;          /* INTEGER_1_3 */
199 static int hf_camel_burstInterval = -1;           /* INTEGER_1_1200 */
200 static int hf_camel_numberOfTonesInBurst = -1;    /* INTEGER_1_3 */
201 static int hf_camel_burstToneDuration = -1;       /* INTEGER_1_20 */
202 static int hf_camel_toneInterval = -1;            /* INTEGER_1_20 */
203 static int hf_camel_warningPeriod = -1;           /* INTEGER_1_1200 */
204 static int hf_camel_bursts = -1;                  /* Burst */
205 static int hf_camel_e1 = -1;                      /* INTEGER_0_8191 */
206 static int hf_camel_e2 = -1;                      /* INTEGER_0_8191 */
207 static int hf_camel_e3 = -1;                      /* INTEGER_0_8191 */
208 static int hf_camel_e4 = -1;                      /* INTEGER_0_8191 */
209 static int hf_camel_e5 = -1;                      /* INTEGER_0_8191 */
210 static int hf_camel_e6 = -1;                      /* INTEGER_0_8191 */
211 static int hf_camel_e7 = -1;                      /* INTEGER_0_8191 */
212 static int hf_camel_callSegmentID = -1;           /* CallSegmentID */
213 static int hf_camel_invokeID = -1;                /* InvokeID */
214 static int hf_camel_timeDurationCharging = -1;    /* T_timeDurationCharging */
215 static int hf_camel_maxCallPeriodDuration = -1;   /* INTEGER_1_864000 */
216 static int hf_camel_releaseIfdurationExceeded = -1;  /* BOOLEAN */
217 static int hf_camel_timeDurationCharging_tariffSwitchInterval = -1;  /* INTEGER_1_86400 */
218 static int hf_camel_audibleIndicator = -1;        /* T_audibleIndicator */
219 static int hf_camel_extensions = -1;              /* Extensions */
220 static int hf_camel_timeDurationChargingResult = -1;  /* T_timeDurationChargingResult */
221 static int hf_camel_timeDurationChargingResultpartyToCharge = -1;  /* ReceivingSideID */
222 static int hf_camel_timeInformation = -1;         /* TimeInformation */
223 static int hf_camel_legActive = -1;               /* BOOLEAN */
224 static int hf_camel_callLegReleasedAtTcpExpiry = -1;  /* NULL */
225 static int hf_camel_aChChargingAddress = -1;      /* AChChargingAddress */
226 static int hf_camel_fci_fCIBCCCAMELsequence1 = -1;  /* T_fci_fCIBCCCAMELsequence1 */
227 static int hf_camel_freeFormatData = -1;          /* OCTET_STRING_SIZE_bound__minFCIBillingChargingDataLength_bound__maxFCIBillingChargingDataLength */
228 static int hf_camel_fCIBCCCAMELsequence1partyToCharge = -1;  /* SendingSideID */
229 static int hf_camel_appendFreeFormatData = -1;    /* AppendFreeFormatData */
230 static int hf_camel_fciGPRS_fCIBCCCAMELsequence1 = -1;  /* T_fciGPRS_fCIBCCCAMELsequence1 */
231 static int hf_camel_pDPID = -1;                   /* PDPID */
232 static int hf_camel_fciSMS_fCIBCCCAMELsequence1 = -1;  /* T_fciSMS_fCIBCCCAMELsequence1 */
233 static int hf_camel_aOCBeforeAnswer = -1;         /* AOCBeforeAnswer */
234 static int hf_camel_aOCAfterAnswer = -1;          /* AOCSubsequent */
235 static int hf_camel_aOC_extension = -1;           /* CAMEL_SCIBillingChargingCharacteristicsAlt */
236 static int hf_camel_aOCGPRS = -1;                 /* AOCGPRS */
237 static int hf_camel_ChangeOfPositionControlInfo_item = -1;  /* ChangeOfLocation */
238 static int hf_camel_cellGlobalId = -1;            /* CellGlobalIdOrServiceAreaIdFixedLength */
239 static int hf_camel_serviceAreaId = -1;           /* CellGlobalIdOrServiceAreaIdFixedLength */
240 static int hf_camel_locationAreaId = -1;          /* LAIFixedLength */
241 static int hf_camel_inter_SystemHandOver = -1;    /* NULL */
242 static int hf_camel_inter_PLMNHandOver = -1;      /* NULL */
243 static int hf_camel_inter_MSCHandOver = -1;       /* NULL */
244 static int hf_camel_changeOfLocationAlt = -1;     /* ChangeOfLocationAlt */
245 static int hf_camel_maxTransferredVolume = -1;    /* INTEGER_1_4294967295 */
246 static int hf_camel_maxElapsedTime = -1;          /* INTEGER_1_86400 */
247 static int hf_camel_transferredVolume = -1;       /* TransferredVolume */
248 static int hf_camel_elapsedTime = -1;             /* ElapsedTime */
249 static int hf_camel_transferredVolumeRollOver = -1;  /* TransferredVolumeRollOver */
250 static int hf_camel_elapsedTimeRollOver = -1;     /* ElapsedTimeRollOver */
251 static int hf_camel_minimumNbOfDigits = -1;       /* INTEGER_1_30 */
252 static int hf_camel_maximumNbOfDigits = -1;       /* INTEGER_1_30 */
253 static int hf_camel_endOfReplyDigit = -1;         /* OCTET_STRING_SIZE_1_2 */
254 static int hf_camel_cancelDigit = -1;             /* OCTET_STRING_SIZE_1_2 */
255 static int hf_camel_startDigit = -1;              /* OCTET_STRING_SIZE_1_2 */
256 static int hf_camel_firstDigitTimeOut = -1;       /* INTEGER_1_127 */
257 static int hf_camel_interDigitTimeOut = -1;       /* INTEGER_1_127 */
258 static int hf_camel_errorTreatment = -1;          /* ErrorTreatment */
259 static int hf_camel_interruptableAnnInd = -1;     /* BOOLEAN */
260 static int hf_camel_voiceInformation = -1;        /* BOOLEAN */
261 static int hf_camel_voiceBack = -1;               /* BOOLEAN */
262 static int hf_camel_collectedDigits = -1;         /* CollectedDigits */
263 static int hf_camel_basicGapCriteria = -1;        /* BasicGapCriteria */
264 static int hf_camel_scfID = -1;                   /* ScfID */
265 static int hf_camel_DestinationRoutingAddress_item = -1;  /* CalledPartyNumber */
266 static int hf_camel_applicationTimer = -1;        /* ApplicationTimer */
267 static int hf_camel_midCallControlInfo = -1;      /* MidCallControlInfo */
268 static int hf_camel_dpSpecificCriteriaAlt = -1;   /* DpSpecificCriteriaAlt */
269 static int hf_camel_changeOfPositionControlInfo = -1;  /* ChangeOfPositionControlInfo */
270 static int hf_camel_numberOfDigits = -1;          /* NumberOfDigits */
271 static int hf_camel_interDigitTimeout = -1;       /* INTEGER_1_127 */
272 static int hf_camel_oServiceChangeSpecificInfo = -1;  /* T_oServiceChangeSpecificInfo */
273 static int hf_camel_ext_basicServiceCode = -1;    /* Ext_BasicServiceCode */
274 static int hf_camel_initiatorOfServiceChange = -1;  /* InitiatorOfServiceChange */
275 static int hf_camel_natureOfServiceChange = -1;   /* NatureOfServiceChange */
276 static int hf_camel_tServiceChangeSpecificInfo = -1;  /* T_tServiceChangeSpecificInfo */
277 static int hf_camel_collectedInfoSpecificInfo = -1;  /* T_collectedInfoSpecificInfo */
278 static int hf_camel_calledPartyNumber = -1;       /* CalledPartyNumber */
279 static int hf_camel_timeGPRSIfNoTariffSwitch = -1;  /* INTEGER_0_86400 */
280 static int hf_camel_timeGPRSIfTariffSwitch = -1;  /* T_timeGPRSIfTariffSwitch */
281 static int hf_camel_timeGPRSSinceLastTariffSwitch = -1;  /* INTEGER_0_86400 */
282 static int hf_camel_timeGPRSTariffSwitchInterval = -1;  /* INTEGER_0_86400 */
283 static int hf_camel_rO_TimeGPRSIfNoTariffSwitch = -1;  /* INTEGER_0_255 */
284 static int hf_camel_rO_TimeGPRSIfTariffSwitch = -1;  /* T_rO_TimeGPRSIfTariffSwitch */
285 static int hf_camel_rO_TimeGPRSSinceLastTariffSwitch = -1;  /* INTEGER_0_255 */
286 static int hf_camel_rO_TimeGPRSTariffSwitchInterval = -1;  /* INTEGER_0_255 */
287 static int hf_camel_pDPTypeOrganization = -1;     /* T_pDPTypeOrganization */
288 static int hf_camel_pDPTypeNumber = -1;           /* T_pDPTypeNumber */
289 static int hf_camel_pDPAddress = -1;              /* T_pDPAddress */
290 static int hf_camel_routeSelectFailureSpecificInfo = -1;  /* T_routeSelectFailureSpecificInfo */
291 static int hf_camel_routeSelectfailureCause = -1;  /* Cause */
292 static int hf_camel_oCalledPartyBusySpecificInfo = -1;  /* T_oCalledPartyBusySpecificInfo */
293 static int hf_camel_busyCause = -1;               /* Cause */
294 static int hf_camel_oNoAnswerSpecificInfo = -1;   /* T_oNoAnswerSpecificInfo */
295 static int hf_camel_oAnswerSpecificInfo = -1;     /* T_oAnswerSpecificInfo */
296 static int hf_camel_destinationAddress = -1;      /* CalledPartyNumber */
297 static int hf_camel_or_Call = -1;                 /* NULL */
298 static int hf_camel_forwardedCall = -1;           /* NULL */
299 static int hf_camel_chargeIndicator = -1;         /* ChargeIndicator */
300 static int hf_camel_ext_basicServiceCode2 = -1;   /* Ext_BasicServiceCode */
301 static int hf_camel_oMidCallSpecificInfo = -1;    /* T_oMidCallSpecificInfo */
302 static int hf_camel_omidCallEvents = -1;          /* T_omidCallEvents */
303 static int hf_camel_dTMFDigitsCompleted = -1;     /* Digits */
304 static int hf_camel_dTMFDigitsTimeOut = -1;       /* Digits */
305 static int hf_camel_oDisconnectSpecificInfo = -1;  /* T_oDisconnectSpecificInfo */
306 static int hf_camel_releaseCause = -1;            /* Cause */
307 static int hf_camel_tBusySpecificInfo = -1;       /* T_tBusySpecificInfo */
308 static int hf_camel_callForwarded = -1;           /* NULL */
309 static int hf_camel_routeNotPermitted = -1;       /* NULL */
310 static int hf_camel_forwardingDestinationNumber = -1;  /* CalledPartyNumber */
311 static int hf_camel_tNoAnswerSpecificInfo = -1;   /* T_tNoAnswerSpecificInfo */
312 static int hf_camel_tAnswerSpecificInfo = -1;     /* T_tAnswerSpecificInfo */
313 static int hf_camel_tMidCallSpecificInfo = -1;    /* T_tMidCallSpecificInfo */
314 static int hf_camel_tmidCallEvents = -1;          /* T_tmidCallEvents */
315 static int hf_camel_tDisconnectSpecificInfo = -1;  /* T_tDisconnectSpecificInfo */
316 static int hf_camel_oTermSeizedSpecificInfo = -1;  /* T_oTermSeizedSpecificInfo */
317 static int hf_camel_locationInformation = -1;     /* LocationInformation */
318 static int hf_camel_callAcceptedSpecificInfo = -1;  /* T_callAcceptedSpecificInfo */
319 static int hf_camel_oAbandonSpecificInfo = -1;    /* T_oAbandonSpecificInfo */
320 static int hf_camel_oChangeOfPositionSpecificInfo = -1;  /* T_oChangeOfPositionSpecificInfo */
321 static int hf_camel_metDPCriteriaList = -1;       /* MetDPCriteriaList */
322 static int hf_camel_tChangeOfPositionSpecificInfo = -1;  /* T_tChangeOfPositionSpecificInfo */
323 static int hf_camel_dpSpecificInfoAlt = -1;       /* DpSpecificInfoAlt */
324 static int hf_camel_o_smsFailureSpecificInfo = -1;  /* T_o_smsFailureSpecificInfo */
325 static int hf_camel_smsfailureCause = -1;         /* MO_SMSCause */
326 static int hf_camel_o_smsSubmissionSpecificInfo = -1;  /* T_o_smsSubmissionSpecificInfo */
327 static int hf_camel_t_smsFailureSpecificInfo = -1;  /* T_t_smsFailureSpecificInfo */
328 static int hf_camel_t_smsfailureCause = -1;       /* MT_SMSCause */
329 static int hf_camel_t_smsDeliverySpecificInfo = -1;  /* T_t_smsDeliverySpecificInfo */
330 static int hf_camel_Extensions_item = -1;         /* ExtensionField */
331 static int hf_camel_type = -1;                    /* Code */
332 static int hf_camel_criticality = -1;             /* CriticalityType */
333 static int hf_camel_value = -1;                   /* T_value */
334 static int hf_camel_callDiversionTreatmentIndicator = -1;  /* OCTET_STRING_SIZE_1 */
335 static int hf_camel_callingPartyRestrictionIndicator = -1;  /* OCTET_STRING_SIZE_1 */
336 static int hf_camel_compoundGapCriteria = -1;     /* CompoundCriteria */
337 static int hf_camel_gapIndicatorsDuration = -1;   /* Duration */
338 static int hf_camel_gapInterval = -1;             /* Interval */
339 static int hf_camel_informationToSend = -1;       /* InformationToSend */
340 static int hf_camel_GenericNumbers_item = -1;     /* GenericNumber */
341 static int hf_camel_short_QoS_format = -1;        /* QoS_Subscribed */
342 static int hf_camel_long_QoS_format = -1;         /* Ext_QoS_Subscribed */
343 static int hf_camel_supplement_to_long_QoS_format = -1;  /* Ext2_QoS_Subscribed */
344 static int hf_camel_additionalSupplement = -1;    /* Ext3_QoS_Subscribed */
345 static int hf_camel_gPRSEventType = -1;           /* GPRSEventType */
346 static int hf_camel_attachChangeOfPositionSpecificInformation = -1;  /* T_attachChangeOfPositionSpecificInformation */
347 static int hf_camel_locationInformationGPRS = -1;  /* LocationInformationGPRS */
348 static int hf_camel_pdp_ContextchangeOfPositionSpecificInformation = -1;  /* T_pdp_ContextchangeOfPositionSpecificInformation */
349 static int hf_camel_accessPointName = -1;         /* AccessPointName */
350 static int hf_camel_chargingID = -1;              /* GPRSChargingID */
351 static int hf_camel_endUserAddress = -1;          /* EndUserAddress */
352 static int hf_camel_qualityOfService = -1;        /* QualityOfService */
353 static int hf_camel_timeAndTimeZone = -1;         /* TimeAndTimezone */
354 static int hf_camel_gGSNAddress = -1;             /* GSN_Address */
355 static int hf_camel_detachSpecificInformation = -1;  /* T_detachSpecificInformation */
356 static int hf_camel_initiatingEntity = -1;        /* InitiatingEntity */
357 static int hf_camel_routeingAreaUpdate = -1;      /* NULL */
358 static int hf_camel_disconnectSpecificInformation = -1;  /* T_disconnectSpecificInformation */
359 static int hf_camel_pDPContextEstablishmentSpecificInformation = -1;  /* T_pDPContextEstablishmentSpecificInformation */
360 static int hf_camel_pDPInitiationType = -1;       /* PDPInitiationType */
361 static int hf_camel_secondaryPDP_context = -1;    /* NULL */
362 static int hf_camel_pDPContextEstablishmentAcknowledgementSpecificInformation = -1;  /* T_pDPContextEstablishmentAcknowledgementSpecificInformation */
363 static int hf_camel_messageID = -1;               /* MessageID */
364 static int hf_camel_numberOfRepetitions = -1;     /* INTEGER_1_127 */
365 static int hf_camel_inbandInfoDuration = -1;      /* INTEGER_0_32767 */
366 static int hf_camel_interval = -1;                /* INTEGER_0_32767 */
367 static int hf_camel_inbandInfo = -1;              /* InbandInfo */
368 static int hf_camel_tone = -1;                    /* Tone */
369 static int hf_camel_cellGlobalIdOrServiceAreaIdOrLAI = -1;  /* T_cellGlobalIdOrServiceAreaIdOrLAI */
370 static int hf_camel_routeingAreaIdentity = -1;    /* RAIdentity */
371 static int hf_camel_geographicalInformation = -1;  /* GeographicalInformation */
372 static int hf_camel_sgsn_Number = -1;             /* ISDN_AddressString */
373 static int hf_camel_selectedLSAIdentity = -1;     /* LSAIdentity */
374 static int hf_camel_extensionContainer = -1;      /* ExtensionContainer */
375 static int hf_camel_sai_Present = -1;             /* NULL */
376 static int hf_camel_userCSGInformation = -1;      /* UserCSGInformation */
377 static int hf_camel_elementaryMessageID = -1;     /* Integer4 */
378 static int hf_camel_text = -1;                    /* T_text */
379 static int hf_camel_messageContent = -1;          /* IA5String_SIZE_bound__minMessageContentLength_bound__maxMessageContentLength */
380 static int hf_camel_attributes = -1;              /* OCTET_STRING_SIZE_bound__minAttributesLength_bound__maxAttributesLength */
381 static int hf_camel_elementaryMessageIDs = -1;    /* SEQUENCE_SIZE_1_bound__numOfMessageIDs_OF_Integer4 */
382 static int hf_camel_elementaryMessageIDs_item = -1;  /* Integer4 */
383 static int hf_camel_variableMessage = -1;         /* T_variableMessage */
384 static int hf_camel_variableParts = -1;           /* SEQUENCE_SIZE_1_5_OF_VariablePart */
385 static int hf_camel_variableParts_item = -1;      /* VariablePart */
386 static int hf_camel_MetDPCriteriaList_item = -1;  /* MetDPCriterion */
387 static int hf_camel_enteringCellGlobalId = -1;    /* CellGlobalIdOrServiceAreaIdFixedLength */
388 static int hf_camel_leavingCellGlobalId = -1;     /* CellGlobalIdOrServiceAreaIdFixedLength */
389 static int hf_camel_enteringServiceAreaId = -1;   /* CellGlobalIdOrServiceAreaIdFixedLength */
390 static int hf_camel_leavingServiceAreaId = -1;    /* CellGlobalIdOrServiceAreaIdFixedLength */
391 static int hf_camel_enteringLocationAreaId = -1;  /* LAIFixedLength */
392 static int hf_camel_leavingLocationAreaId = -1;   /* LAIFixedLength */
393 static int hf_camel_inter_SystemHandOverToUMTS = -1;  /* NULL */
394 static int hf_camel_inter_SystemHandOverToGSM = -1;  /* NULL */
395 static int hf_camel_metDPCriterionAlt = -1;       /* MetDPCriterionAlt */
396 static int hf_camel_minimumNumberOfDigits = -1;   /* INTEGER_1_30 */
397 static int hf_camel_maximumNumberOfDigits = -1;   /* INTEGER_1_30 */
398 static int hf_camel_requested_QoS = -1;           /* GPRS_QoS */
399 static int hf_camel_subscribed_QoS = -1;          /* GPRS_QoS */
400 static int hf_camel_negotiated_QoS = -1;          /* GPRS_QoS */
401 static int hf_camel_requested_QoS_Extension = -1;  /* GPRS_QoS_Extension */
402 static int hf_camel_subscribed_QoS_Extension = -1;  /* GPRS_QoS_Extension */
403 static int hf_camel_negotiated_QoS_Extension = -1;  /* GPRS_QoS_Extension */
404 static int hf_camel_receivingSideID = -1;         /* LegType */
405 static int hf_camel_RequestedInformationList_item = -1;  /* RequestedInformation */
406 static int hf_camel_RequestedInformationTypeList_item = -1;  /* RequestedInformationType */
407 static int hf_camel_requestedInformationType = -1;  /* RequestedInformationType */
408 static int hf_camel_requestedInformationValue = -1;  /* RequestedInformationValue */
409 static int hf_camel_callAttemptElapsedTimeValue = -1;  /* INTEGER_0_255 */
410 static int hf_camel_callStopTimeValue = -1;       /* DateAndTime */
411 static int hf_camel_callConnectedElapsedTimeValue = -1;  /* Integer4 */
412 static int hf_camel_releaseCauseValue = -1;       /* Cause */
413 static int hf_camel_sendingSideID = -1;           /* LegType */
414 static int hf_camel_forwardServiceInteractionInd = -1;  /* ForwardServiceInteractionInd */
415 static int hf_camel_backwardServiceInteractionInd = -1;  /* BackwardServiceInteractionInd */
416 static int hf_camel_bothwayThroughConnectionInd = -1;  /* BothwayThroughConnectionInd */
417 static int hf_camel_connectedNumberTreatmentInd = -1;  /* ConnectedNumberTreatmentInd */
418 static int hf_camel_nonCUGCall = -1;              /* NULL */
419 static int hf_camel_holdTreatmentIndicator = -1;  /* OCTET_STRING_SIZE_1 */
420 static int hf_camel_cwTreatmentIndicator = -1;    /* OCTET_STRING_SIZE_1 */
421 static int hf_camel_ectTreatmentIndicator = -1;   /* OCTET_STRING_SIZE_1 */
422 static int hf_camel_eventTypeSMS = -1;            /* EventTypeSMS */
423 static int hf_camel_timeSinceTariffSwitch = -1;   /* INTEGER_0_864000 */
424 static int hf_camel_timeIfTariffSwitch_tariffSwitchInterval = -1;  /* INTEGER_1_864000 */
425 static int hf_camel_timeIfNoTariffSwitch = -1;    /* TimeIfNoTariffSwitch */
426 static int hf_camel_timeIfTariffSwitch = -1;      /* TimeIfTariffSwitch */
427 static int hf_camel_toneID = -1;                  /* Integer4 */
428 static int hf_camel_toneDuration = -1;            /* Integer4 */
429 static int hf_camel_volumeIfNoTariffSwitch = -1;  /* INTEGER_0_4294967295 */
430 static int hf_camel_volumeIfTariffSwitch = -1;    /* T_volumeIfTariffSwitch */
431 static int hf_camel_volumeSinceLastTariffSwitch = -1;  /* INTEGER_0_4294967295 */
432 static int hf_camel_volumeTariffSwitchInterval = -1;  /* INTEGER_0_4294967295 */
433 static int hf_camel_rO_VolumeIfNoTariffSwitch = -1;  /* INTEGER_0_255 */
434 static int hf_camel_rO_VolumeIfTariffSwitch = -1;  /* T_rO_VolumeIfTariffSwitch */
435 static int hf_camel_rO_VolumeSinceLastTariffSwitch = -1;  /* INTEGER_0_255 */
436 static int hf_camel_rO_VolumeTariffSwitchInterval = -1;  /* INTEGER_0_255 */
437 static int hf_camel_integer = -1;                 /* Integer4 */
438 static int hf_camel_number = -1;                  /* Digits */
439 static int hf_camel_time = -1;                    /* OCTET_STRING_SIZE_2 */
440 static int hf_camel_date = -1;                    /* OCTET_STRING_SIZE_4 */
441 static int hf_camel_price = -1;                   /* OCTET_STRING_SIZE_4 */
442 static int hf_camel_par_cancelFailedProblem = -1;  /* T_par_cancelFailedProblem */
443 static int hf_camel_operation = -1;               /* InvokeID */
444 static int hf_camel_destinationReference = -1;    /* Integer4 */
445 static int hf_camel_originationReference = -1;    /* Integer4 */
446 static int hf_camel_disconnectFromIPForbidden = -1;  /* BOOLEAN */
447 static int hf_camel_requestAnnouncementCompleteNotification = -1;  /* BOOLEAN */
448 static int hf_camel_requestAnnouncementStartedNotification = -1;  /* BOOLEAN */
449 static int hf_camel_collectedInfo = -1;           /* CollectedInfo */
450 static int hf_camel_digitsResponse = -1;          /* Digits */
451 static int hf_camel_allAnnouncementsComplete = -1;  /* NULL */
452 static int hf_camel_firstAnnouncementStarted = -1;  /* NULL */
453 static int hf_camel_aChBillingChargingCharacteristics = -1;  /* AChBillingChargingCharacteristics */
454 static int hf_camel_partyToCharge = -1;           /* SendingSideID */
455 static int hf_camel_iTXcharging = -1;             /* BOOLEAN */
456 static int hf_camel_correlationID = -1;           /* CorrelationID */
457 static int hf_camel_iPSSPCapabilities = -1;       /* IPSSPCapabilities */
458 static int hf_camel_gapCriteria = -1;             /* GapCriteria */
459 static int hf_camel_gapIndicators = -1;           /* GapIndicators */
460 static int hf_camel_controlType = -1;             /* ControlType */
461 static int hf_camel_gapTreatment = -1;            /* GapTreatment */
462 static int hf_camel_requestedInformationList = -1;  /* RequestedInformationList */
463 static int hf_camel_legID_01 = -1;                /* ReceivingSideID */
464 static int hf_camel_requestedInformationTypeList = -1;  /* RequestedInformationTypeList */
465 static int hf_camel_legID_02 = -1;                /* SendingSideID */
466 static int hf_camel_allRequests = -1;             /* NULL */
467 static int hf_camel_callSegmentToCancel = -1;     /* CallSegmentToCancel */
468 static int hf_camel_destinationRoutingAddress = -1;  /* DestinationRoutingAddress */
469 static int hf_camel_alertingPattern = -1;         /* AlertingPattern */
470 static int hf_camel_originalCalledPartyID = -1;   /* OriginalCalledPartyID */
471 static int hf_camel_carrier = -1;                 /* Carrier */
472 static int hf_camel_callingPartysCategory = -1;   /* CallingPartysCategory */
473 static int hf_camel_redirectingPartyID = -1;      /* RedirectingPartyID */
474 static int hf_camel_redirectionInformation = -1;  /* RedirectionInformation */
475 static int hf_camel_genericNumbers = -1;          /* GenericNumbers */
476 static int hf_camel_serviceInteractionIndicatorsTwo = -1;  /* ServiceInteractionIndicatorsTwo */
477 static int hf_camel_chargeNumber = -1;            /* ChargeNumber */
478 static int hf_camel_legToBeConnected = -1;        /* LegID */
479 static int hf_camel_cug_Interlock = -1;           /* CUG_Interlock */
480 static int hf_camel_cug_OutgoingAccess = -1;      /* NULL */
481 static int hf_camel_suppressionOfAnnouncement = -1;  /* SuppressionOfAnnouncement */
482 static int hf_camel_oCSIApplicable = -1;          /* OCSIApplicable */
483 static int hf_camel_naOliInfo = -1;               /* NAOliInfo */
484 static int hf_camel_bor_InterrogationRequested = -1;  /* NULL */
485 static int hf_camel_suppress_N_CSI = -1;          /* NULL */
486 static int hf_camel_resourceAddress = -1;         /* T_resourceAddress */
487 static int hf_camel_ipRoutingAddress = -1;        /* IPRoutingAddress */
488 static int hf_camel_none = -1;                    /* NULL */
489 static int hf_camel_suppress_O_CSI = -1;          /* NULL */
490 static int hf_camel_continueWithArgumentArgExtension = -1;  /* ContinueWithArgumentArgExtension */
491 static int hf_camel_suppress_D_CSI = -1;          /* NULL */
492 static int hf_camel_suppressOutgoingCallBarring = -1;  /* NULL */
493 static int hf_camel_legOrCallSegment = -1;        /* LegOrCallSegment */
494 static int hf_camel_legToBeReleased = -1;         /* LegID */
495 static int hf_camel_callSegmentFailure = -1;      /* CallSegmentFailure */
496 static int hf_camel_bCSM_Failure = -1;            /* BCSM_Failure */
497 static int hf_camel_assistingSSPIPRoutingAddress = -1;  /* AssistingSSPIPRoutingAddress */
498 static int hf_camel_callingPartyNumber = -1;      /* CallingPartyNumber */
499 static int hf_camel_eventSpecificInformationBCSM = -1;  /* EventSpecificInformationBCSM */
500 static int hf_camel_miscCallInfo = -1;            /* MiscCallInfo */
501 static int hf_camel_cGEncountered = -1;           /* CGEncountered */
502 static int hf_camel_locationNumber = -1;          /* LocationNumber */
503 static int hf_camel_highLayerCompatibility = -1;  /* HighLayerCompatibility */
504 static int hf_camel_additionalCallingPartyNumber = -1;  /* AdditionalCallingPartyNumber */
505 static int hf_camel_bearerCapability = -1;        /* BearerCapability */
506 static int hf_camel_cug_Index = -1;               /* CUG_Index */
507 static int hf_camel_iMSI = -1;                    /* IMSI */
508 static int hf_camel_subscriberState = -1;         /* SubscriberState */
509 static int hf_camel_callReferenceNumber = -1;     /* CallReferenceNumber */
510 static int hf_camel_mscAddress = -1;              /* ISDN_AddressString */
511 static int hf_camel_calledPartyBCDNumber = -1;    /* CalledPartyBCDNumber */
512 static int hf_camel_timeAndTimezone = -1;         /* TimeAndTimezone */
513 static int hf_camel_callForwardingSS_Pending = -1;  /* NULL */
514 static int hf_camel_initialDPArgExtension = -1;   /* InitialDPArgExtension */
515 static int hf_camel_gmscAddress = -1;             /* ISDN_AddressString */
516 static int hf_camel_ms_Classmark2 = -1;           /* MS_Classmark2 */
517 static int hf_camel_iMEI = -1;                    /* IMEI */
518 static int hf_camel_supportedCamelPhases = -1;    /* SupportedCamelPhases */
519 static int hf_camel_offeredCamel4Functionalities = -1;  /* OfferedCamel4Functionalities */
520 static int hf_camel_bearerCapability2 = -1;       /* BearerCapability */
521 static int hf_camel_highLayerCompatibility2 = -1;  /* HighLayerCompatibility */
522 static int hf_camel_lowLayerCompatibility = -1;   /* LowLayerCompatibility */
523 static int hf_camel_lowLayerCompatibility2 = -1;  /* LowLayerCompatibility */
524 static int hf_camel_enhancedDialledServicesAllowed = -1;  /* NULL */
525 static int hf_camel_uu_Data = -1;                 /* UU_Data */
526 static int hf_camel_collectInformationAllowed = -1;  /* NULL */
527 static int hf_camel_releaseCallArgExtensionAllowed = -1;  /* NULL */
528 static int hf_camel_legToBeCreated = -1;          /* LegID */
529 static int hf_camel_newCallSegment = -1;          /* CallSegmentID */
530 static int hf_camel_gsmSCFAddress = -1;           /* ISDN_AddressString */
531 static int hf_camel_suppress_T_CSI = -1;          /* NULL */
532 static int hf_camel_legIDToMove = -1;             /* LegID */
533 static int hf_camel_allCallSegments = -1;         /* AllCallSegments */
534 static int hf_camel_allCallSegmentsWithExtension = -1;  /* AllCallSegmentsWithExtension */
535 static int hf_camel_bcsmEvents = -1;              /* SEQUENCE_SIZE_1_bound__numOfBCSMEvents_OF_BCSMEvent */
536 static int hf_camel_bcsmEvents_item = -1;         /* BCSMEvent */
537 static int hf_camel_timerID = -1;                 /* TimerID */
538 static int hf_camel_timervalue = -1;              /* TimerValue */
539 static int hf_camel_sCIBillingChargingCharacteristics = -1;  /* SCIBillingChargingCharacteristics */
540 static int hf_camel_legToBeSplit = -1;            /* LegID */
541 static int hf_camel_chargingCharacteristics = -1;  /* ChargingCharacteristics */
542 static int hf_camel_applyChargingGPRS_tariffSwitchInterval = -1;  /* INTEGER_1_86400 */
543 static int hf_camel_chargingResult = -1;          /* ChargingResult */
544 static int hf_camel_active = -1;                  /* BOOLEAN */
545 static int hf_camel_chargingRollOver = -1;        /* ChargingRollOver */
546 static int hf_camel_pdpID = -1;                   /* PDPID */
547 static int hf_camel_gPRSCause = -1;               /* GPRSCause */
548 static int hf_camel_miscGPRSInfo = -1;            /* MiscCallInfo */
549 static int hf_camel_gPRSEventSpecificInformation = -1;  /* GPRSEventSpecificInformation */
550 static int hf_camel_mSISDN = -1;                  /* ISDN_AddressString */
551 static int hf_camel_gPRSMSClass = -1;             /* GPRSMSClass */
552 static int hf_camel_sGSNCapabilities = -1;        /* SGSNCapabilities */
553 static int hf_camel_gprsCause = -1;               /* GPRSCause */
554 static int hf_camel_gPRSEvent = -1;               /* SEQUENCE_SIZE_1_bound__numOfGPRSEvents_OF_GPRSEvent */
555 static int hf_camel_gPRSEvent_item = -1;          /* GPRSEvent */
556 static int hf_camel_sCIGPRSBillingChargingCharacteristics = -1;  /* SCIGPRSBillingChargingCharacteristics */
557 static int hf_camel_callingPartysNumber = -1;     /* SMS_AddressString */
558 static int hf_camel_destinationSubscriberNumber = -1;  /* CalledPartyBCDNumber */
559 static int hf_camel_sMSCAddress = -1;             /* ISDN_AddressString */
560 static int hf_camel_eventSpecificInformationSMS = -1;  /* EventSpecificInformationSMS */
561 static int hf_camel_callingPartyNumber_01 = -1;   /* SMS_AddressString */
562 static int hf_camel_locationInformationMSC = -1;  /* LocationInformation */
563 static int hf_camel_tPShortMessageSpecificInfo = -1;  /* TPShortMessageSpecificInfo */
564 static int hf_camel_tPProtocolIdentifier = -1;    /* TPProtocolIdentifier */
565 static int hf_camel_tPDataCodingScheme = -1;      /* TPDataCodingScheme */
566 static int hf_camel_tPValidityPeriod = -1;        /* TPValidityPeriod */
567 static int hf_camel_smsReferenceNumber = -1;      /* CallReferenceNumber */
568 static int hf_camel_calledPartyNumber_01 = -1;    /* ISDN_AddressString */
569 static int hf_camel_sMSEvents = -1;               /* SEQUENCE_SIZE_1_bound__numOfSMSEvents_OF_SMSEvent */
570 static int hf_camel_sMSEvents_item = -1;          /* SMSEvent */
571 static int hf_camel_naCarrierInformation = -1;    /* NACarrierInformation */
572 static int hf_camel_naCarrierId = -1;             /* NAEA_CIC */
573 static int hf_camel_naCICSelectionType = -1;      /* NACarrierSelectionInfo */
574 static int hf_camel_timeDurationCharging_01 = -1;  /* T_timeDurationCharging_01 */
575 static int hf_camel_releaseIfdurationExceeded_01 = -1;  /* ReleaseIfDurationExceeded */
576 static int hf_camel_tariffSwitchInterval = -1;    /* INTEGER_1_86400 */
577 static int hf_camel_tone_01 = -1;                 /* BOOLEAN */
578 static int hf_camel_extensions_01 = -1;           /* SEQUENCE_SIZE_1_numOfExtensions_OF_ExtensionField */
579 static int hf_camel_extensions_item = -1;         /* ExtensionField */
580 static int hf_camel_local = -1;                   /* T_local */
581 static int hf_camel_global = -1;                  /* T_global */
582 static int hf_camel_invoke = -1;                  /* Invoke */
583 static int hf_camel_returnResult = -1;            /* ReturnResult */
584 static int hf_camel_returnError = -1;             /* ReturnError */
585 static int hf_camel_reject = -1;                  /* Reject */
586 static int hf_camel_invokeId = -1;                /* InvokeId */
587 static int hf_camel_linkedId = -1;                /* T_linkedId */
588 static int hf_camel_linkedIdPresent = -1;         /* T_linkedIdPresent */
589 static int hf_camel_absent = -1;                  /* NULL */
590 static int hf_camel_opcode = -1;                  /* Code */
591 static int hf_camel_argument = -1;                /* T_argument */
592 static int hf_camel_result = -1;                  /* T_result */
593 static int hf_camel_resultArgument = -1;          /* ResultArgument */
594 static int hf_camel_errcode = -1;                 /* Code */
595 static int hf_camel_parameter = -1;               /* T_parameter */
596 static int hf_camel_problem = -1;                 /* T_problem */
597 static int hf_camel_general = -1;                 /* GeneralProblem */
598 static int hf_camel_invokeProblem = -1;           /* InvokeProblem */
599 static int hf_camel_problemReturnResult = -1;     /* ReturnResultProblem */
600 static int hf_camel_returnErrorProblem = -1;      /* ReturnErrorProblem */
601 static int hf_camel_present = -1;                 /* INTEGER */
602 static int hf_camel_InvokeId_present = -1;        /* InvokeId_present */
603
604 /*--- End of included file: packet-camel-hf.c ---*/
605 #line 109 "../../asn1/camel/packet-camel-template.c"
606
607 static struct camelsrt_info_t * gp_camelsrt_info;
608
609 /* Forward declarations */
610 static int dissect_invokeData(proto_tree *tree, tvbuff_t *tvb, int offset,asn1_ctx_t *actx);
611 static int dissect_returnResultData(proto_tree *tree, tvbuff_t *tvb, int offset,asn1_ctx_t *actx);
612 static int dissect_returnErrorData(proto_tree *tree, tvbuff_t *tvb, int offset,asn1_ctx_t *actx);
613 static int dissect_camel_CAMEL_AChBillingChargingCharacteristics(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
614 static int dissect_camel_CAMEL_AChBillingChargingCharacteristicsV2(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
615 static int dissect_camel_CAMEL_CallResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
616
617 gboolean gcamel_HandleSRT=FALSE;
618 extern gboolean gcamel_PersistentSRT;
619 extern gboolean gcamel_DisplaySRT;
620
621 /* Initialize the subtree pointers */
622 static gint ett_camel = -1;
623 static gint ett_camelisup_parameter = -1;
624 static gint ett_camel_AccessPointName = -1;
625 static gint ett_camel_pdptypenumber = -1;
626 static gint ett_camel_cause = -1;
627 static gint ett_camel_RPcause = -1;
628 static gint ett_camel_stat = -1;
629 static gint ett_camel_calledpartybcdnumber = -1;
630 static gint ett_camel_callingpartynumber = -1;
631 static gint ett_camel_locationnumber = -1;
632
633
634 /*--- Included file: packet-camel-ett.c ---*/
635 #line 1 "../../asn1/camel/packet-camel-ett.c"
636 static gint ett_camel_AChChargingAddress = -1;
637 static gint ett_camel_AOCBeforeAnswer = -1;
638 static gint ett_camel_AOCGPRS = -1;
639 static gint ett_camel_AOCSubsequent = -1;
640 static gint ett_camel_AudibleIndicator = -1;
641 static gint ett_camel_BackwardServiceInteractionInd = -1;
642 static gint ett_camel_BasicGapCriteria = -1;
643 static gint ett_camel_T_calledAddressAndService = -1;
644 static gint ett_camel_T_callingAddressAndService = -1;
645 static gint ett_camel_BCSMEvent = -1;
646 static gint ett_camel_BCSM_Failure = -1;
647 static gint ett_camel_BearerCapability = -1;
648 static gint ett_camel_Burst = -1;
649 static gint ett_camel_BurstList = -1;
650 static gint ett_camel_CAI_GSM0224 = -1;
651 static gint ett_camel_CallSegmentFailure = -1;
652 static gint ett_camel_CallSegmentToCancel = -1;
653 static gint ett_camel_CAMEL_AChBillingChargingCharacteristics = -1;
654 static gint ett_camel_T_timeDurationCharging = -1;
655 static gint ett_camel_CAMEL_CallResult = -1;
656 static gint ett_camel_T_timeDurationChargingResult = -1;
657 static gint ett_camel_CAMEL_FCIBillingChargingCharacteristics = -1;
658 static gint ett_camel_T_fci_fCIBCCCAMELsequence1 = -1;
659 static gint ett_camel_CAMEL_FCIGPRSBillingChargingCharacteristics = -1;
660 static gint ett_camel_T_fciGPRS_fCIBCCCAMELsequence1 = -1;
661 static gint ett_camel_CAMEL_FCISMSBillingChargingCharacteristics = -1;
662 static gint ett_camel_T_fciSMS_fCIBCCCAMELsequence1 = -1;
663 static gint ett_camel_CAMEL_SCIBillingChargingCharacteristics = -1;
664 static gint ett_camel_CAMEL_SCIBillingChargingCharacteristicsAlt = -1;
665 static gint ett_camel_CAMEL_SCIGPRSBillingChargingCharacteristics = -1;
666 static gint ett_camel_ChangeOfPositionControlInfo = -1;
667 static gint ett_camel_ChangeOfLocation = -1;
668 static gint ett_camel_ChangeOfLocationAlt = -1;
669 static gint ett_camel_ChargingCharacteristics = -1;
670 static gint ett_camel_ChargingResult = -1;
671 static gint ett_camel_ChargingRollOver = -1;
672 static gint ett_camel_CollectedDigits = -1;
673 static gint ett_camel_CollectedInfo = -1;
674 static gint ett_camel_CompoundCriteria = -1;
675 static gint ett_camel_DestinationRoutingAddress = -1;
676 static gint ett_camel_DpSpecificCriteria = -1;
677 static gint ett_camel_DpSpecificCriteriaAlt = -1;
678 static gint ett_camel_DpSpecificInfoAlt = -1;
679 static gint ett_camel_T_oServiceChangeSpecificInfo = -1;
680 static gint ett_camel_T_tServiceChangeSpecificInfo = -1;
681 static gint ett_camel_T_collectedInfoSpecificInfo = -1;
682 static gint ett_camel_ElapsedTime = -1;
683 static gint ett_camel_T_timeGPRSIfTariffSwitch = -1;
684 static gint ett_camel_ElapsedTimeRollOver = -1;
685 static gint ett_camel_T_rO_TimeGPRSIfTariffSwitch = -1;
686 static gint ett_camel_EndUserAddress = -1;
687 static gint ett_camel_EventSpecificInformationBCSM = -1;
688 static gint ett_camel_T_routeSelectFailureSpecificInfo = -1;
689 static gint ett_camel_T_oCalledPartyBusySpecificInfo = -1;
690 static gint ett_camel_T_oNoAnswerSpecificInfo = -1;
691 static gint ett_camel_T_oAnswerSpecificInfo = -1;
692 static gint ett_camel_T_oMidCallSpecificInfo = -1;
693 static gint ett_camel_T_omidCallEvents = -1;
694 static gint ett_camel_T_oDisconnectSpecificInfo = -1;
695 static gint ett_camel_T_tBusySpecificInfo = -1;
696 static gint ett_camel_T_tNoAnswerSpecificInfo = -1;
697 static gint ett_camel_T_tAnswerSpecificInfo = -1;
698 static gint ett_camel_T_tMidCallSpecificInfo = -1;
699 static gint ett_camel_T_tmidCallEvents = -1;
700 static gint ett_camel_T_tDisconnectSpecificInfo = -1;
701 static gint ett_camel_T_oTermSeizedSpecificInfo = -1;
702 static gint ett_camel_T_callAcceptedSpecificInfo = -1;
703 static gint ett_camel_T_oAbandonSpecificInfo = -1;
704 static gint ett_camel_T_oChangeOfPositionSpecificInfo = -1;
705 static gint ett_camel_T_tChangeOfPositionSpecificInfo = -1;
706 static gint ett_camel_EventSpecificInformationSMS = -1;
707 static gint ett_camel_T_o_smsFailureSpecificInfo = -1;
708 static gint ett_camel_T_o_smsSubmissionSpecificInfo = -1;
709 static gint ett_camel_T_t_smsFailureSpecificInfo = -1;
710 static gint ett_camel_T_t_smsDeliverySpecificInfo = -1;
711 static gint ett_camel_Extensions = -1;
712 static gint ett_camel_ExtensionField = -1;
713 static gint ett_camel_ForwardServiceInteractionInd = -1;
714 static gint ett_camel_GapCriteria = -1;
715 static gint ett_camel_GapIndicators = -1;
716 static gint ett_camel_GapOnService = -1;
717 static gint ett_camel_GapTreatment = -1;
718 static gint ett_camel_GenericNumbers = -1;
719 static gint ett_camel_GPRS_QoS = -1;
720 static gint ett_camel_GPRS_QoS_Extension = -1;
721 static gint ett_camel_GPRSEvent = -1;
722 static gint ett_camel_GPRSEventSpecificInformation = -1;
723 static gint ett_camel_T_attachChangeOfPositionSpecificInformation = -1;
724 static gint ett_camel_T_pdp_ContextchangeOfPositionSpecificInformation = -1;
725 static gint ett_camel_T_detachSpecificInformation = -1;
726 static gint ett_camel_T_disconnectSpecificInformation = -1;
727 static gint ett_camel_T_pDPContextEstablishmentSpecificInformation = -1;
728 static gint ett_camel_T_pDPContextEstablishmentAcknowledgementSpecificInformation = -1;
729 static gint ett_camel_InbandInfo = -1;
730 static gint ett_camel_InformationToSend = -1;
731 static gint ett_camel_LegOrCallSegment = -1;
732 static gint ett_camel_LocationInformationGPRS = -1;
733 static gint ett_camel_MessageID = -1;
734 static gint ett_camel_T_text = -1;
735 static gint ett_camel_SEQUENCE_SIZE_1_bound__numOfMessageIDs_OF_Integer4 = -1;
736 static gint ett_camel_T_variableMessage = -1;
737 static gint ett_camel_SEQUENCE_SIZE_1_5_OF_VariablePart = -1;
738 static gint ett_camel_MetDPCriteriaList = -1;
739 static gint ett_camel_MetDPCriterion = -1;
740 static gint ett_camel_MetDPCriterionAlt = -1;
741 static gint ett_camel_MidCallControlInfo = -1;
742 static gint ett_camel_QualityOfService = -1;
743 static gint ett_camel_ReceivingSideID = -1;
744 static gint ett_camel_RequestedInformationList = -1;
745 static gint ett_camel_RequestedInformationTypeList = -1;
746 static gint ett_camel_RequestedInformation = -1;
747 static gint ett_camel_RequestedInformationValue = -1;
748 static gint ett_camel_SendingSideID = -1;
749 static gint ett_camel_ServiceInteractionIndicatorsTwo = -1;
750 static gint ett_camel_SMSEvent = -1;
751 static gint ett_camel_TimeIfTariffSwitch = -1;
752 static gint ett_camel_TimeInformation = -1;
753 static gint ett_camel_Tone = -1;
754 static gint ett_camel_TransferredVolume = -1;
755 static gint ett_camel_T_volumeIfTariffSwitch = -1;
756 static gint ett_camel_TransferredVolumeRollOver = -1;
757 static gint ett_camel_T_rO_VolumeIfTariffSwitch = -1;
758 static gint ett_camel_VariablePart = -1;
759 static gint ett_camel_PAR_cancelFailed = -1;
760 static gint ett_camel_CAP_GPRS_ReferenceNumber = -1;
761 static gint ett_camel_PlayAnnouncementArg = -1;
762 static gint ett_camel_PromptAndCollectUserInformationArg = -1;
763 static gint ett_camel_ReceivedInformationArg = -1;
764 static gint ett_camel_SpecializedResourceReportArg = -1;
765 static gint ett_camel_ApplyChargingArg = -1;
766 static gint ett_camel_AssistRequestInstructionsArg = -1;
767 static gint ett_camel_CallGapArg = -1;
768 static gint ett_camel_CallInformationReportArg = -1;
769 static gint ett_camel_CallInformationRequestArg = -1;
770 static gint ett_camel_CancelArg = -1;
771 static gint ett_camel_CollectInformationArg = -1;
772 static gint ett_camel_ConnectArg = -1;
773 static gint ett_camel_ConnectToResourceArg = -1;
774 static gint ett_camel_T_resourceAddress = -1;
775 static gint ett_camel_ContinueWithArgumentArg = -1;
776 static gint ett_camel_ContinueWithArgumentArgExtension = -1;
777 static gint ett_camel_DisconnectForwardConnectionWithArgumentArg = -1;
778 static gint ett_camel_DisconnectLegArg = -1;
779 static gint ett_camel_EntityReleasedArg = -1;
780 static gint ett_camel_EstablishTemporaryConnectionArg = -1;
781 static gint ett_camel_EventReportBCSMArg = -1;
782 static gint ett_camel_InitialDPArg = -1;
783 static gint ett_camel_InitialDPArgExtension = -1;
784 static gint ett_camel_InitiateCallAttemptArg = -1;
785 static gint ett_camel_InitiateCallAttemptRes = -1;
786 static gint ett_camel_MoveLegArg = -1;
787 static gint ett_camel_PlayToneArg = -1;
788 static gint ett_camel_ReleaseCallArg = -1;
789 static gint ett_camel_AllCallSegmentsWithExtension = -1;
790 static gint ett_camel_RequestReportBCSMEventArg = -1;
791 static gint ett_camel_SEQUENCE_SIZE_1_bound__numOfBCSMEvents_OF_BCSMEvent = -1;
792 static gint ett_camel_ResetTimerArg = -1;
793 static gint ett_camel_SendChargingInformationArg = -1;
794 static gint ett_camel_SplitLegArg = -1;
795 static gint ett_camel_ApplyChargingGPRSArg = -1;
796 static gint ett_camel_ApplyChargingReportGPRSArg = -1;
797 static gint ett_camel_CancelGPRSArg = -1;
798 static gint ett_camel_ConnectGPRSArg = -1;
799 static gint ett_camel_ContinueGPRSArg = -1;
800 static gint ett_camel_EntityReleasedGPRSArg = -1;
801 static gint ett_camel_EventReportGPRSArg = -1;
802 static gint ett_camel_InitialDPGPRSArg = -1;
803 static gint ett_camel_ReleaseGPRSArg = -1;
804 static gint ett_camel_RequestReportGPRSEventArg = -1;
805 static gint ett_camel_SEQUENCE_SIZE_1_bound__numOfGPRSEvents_OF_GPRSEvent = -1;
806 static gint ett_camel_ResetTimerGPRSArg = -1;
807 static gint ett_camel_SendChargingInformationGPRSArg = -1;
808 static gint ett_camel_ConnectSMSArg = -1;
809 static gint ett_camel_EventReportSMSArg = -1;
810 static gint ett_camel_InitialDPSMSArg = -1;
811 static gint ett_camel_RequestReportSMSEventArg = -1;
812 static gint ett_camel_SEQUENCE_SIZE_1_bound__numOfSMSEvents_OF_SMSEvent = -1;
813 static gint ett_camel_ResetTimerSMSArg = -1;
814 static gint ett_camel_InitialDPArgExtensionV2 = -1;
815 static gint ett_camel_NACarrierInformation = -1;
816 static gint ett_camel_CAMEL_AChBillingChargingCharacteristicsV2 = -1;
817 static gint ett_camel_T_timeDurationCharging_01 = -1;
818 static gint ett_camel_ReleaseIfDurationExceeded = -1;
819 static gint ett_camel_SEQUENCE_SIZE_1_numOfExtensions_OF_ExtensionField = -1;
820 static gint ett_camel_Code = -1;
821 static gint ett_camel_ROS = -1;
822 static gint ett_camel_Invoke = -1;
823 static gint ett_camel_T_linkedId = -1;
824 static gint ett_camel_ReturnResult = -1;
825 static gint ett_camel_T_result = -1;
826 static gint ett_camel_ReturnError = -1;
827 static gint ett_camel_Reject = -1;
828 static gint ett_camel_T_problem = -1;
829 static gint ett_camel_InvokeId = -1;
830
831 /*--- End of included file: packet-camel-ett.c ---*/
832 #line 137 "../../asn1/camel/packet-camel-template.c"
833
834 static expert_field ei_camel_unknown_invokeData = EI_INIT;
835 static expert_field ei_camel_unknown_returnResultData = EI_INIT;
836 static expert_field ei_camel_unknown_returnErrorData = EI_INIT;
837
838 /* Preference settings default */
839 #define MAX_SSN 254
840 static range_t *global_ssn_range;
841 static dissector_handle_t  camel_handle;
842 static dissector_handle_t  camel_v1_handle;
843 static dissector_handle_t  camel_v2_handle;
844
845 /* Global variables */
846
847 static int application_context_version;
848 static guint8 PDPTypeOrganization;
849 static guint8 PDPTypeNumber;
850 const char *camel_obj_id = NULL;
851 gboolean is_ExtensionField =FALSE;
852
853 static int camel_opcode_type;
854 #define CAMEL_OPCODE_INVOKE        1
855 #define CAMEL_OPCODE_RETURN_RESULT 2
856 #define CAMEL_OPCODE_RETURN_ERROR  3
857 #define CAMEL_OPCODE_REJECT        4
858
859 static const value_string camel_Component_vals[] = {
860   {   1, "invoke" },
861   {   2, "returnResultLast" },
862   {   3, "returnError" },
863   {   4, "reject" },
864   { 0, NULL }
865 };
866
867 static const true_false_string camel_extension_value = {
868   "No Extension",
869   "Extension"
870 };
871 #define EUROPEAN_DATE 1
872 #define AMERICAN_DATE 2
873 #define CAMEL_DATE_AND_TIME_LEN 20 /* 2*5 + 4 + 5 + 1 (HH:MM:SS;mm/dd/yyyy) */
874
875 static const enum_val_t date_options[] = {
876   { "european",         "DD/MM/YYYY",       EUROPEAN_DATE },
877   { "american",        "MM/DD/YYYY",        AMERICAN_DATE },
878   { NULL, NULL, 0 }
879 };
880
881 static const value_string digit_value[] = {
882     { 0,  "0"},
883     { 1,  "1"},
884     { 2,  "2"},
885     { 3,  "3"},
886     { 4,  "4"},
887     { 5,  "5"},
888     { 6,  "6"},
889     { 7,  "7"},
890     { 8,  "8"},
891     { 9,  "9"},
892     { 10, "spare"},
893     { 11, "spare"},
894     { 12, "spare"},
895     { 13, "spare"},
896     { 0,  NULL}};
897
898
899 static const value_string camel_nature_of_addr_indicator_values[] = {
900   {   0x00,  "unknown" },
901   {   0x01,  "International Number" },
902   {   0x02,  "National Significant Number" },
903   {   0x03,  "Network Specific Number" },
904   {   0x04,  "Subscriber Number" },
905   {   0x05,  "Reserved" },
906   {   0x06,  "Abbreviated Number" },
907   {   0x07,  "Reserved for extension" },
908   { 0, NULL }
909 };
910 static const value_string camel_number_plan_values[] = {
911   {   0x00,  "unknown" },
912   {   0x01,  "ISDN/Telephony Numbering (Rec ITU-T E.164)" },
913   {   0x02,  "spare" },
914   {   0x03,  "Data Numbering (ITU-T Rec. X.121)" },
915   {   0x04,  "Telex Numbering (ITU-T Rec. F.69)" },
916   {   0x05,  "spare" },
917   {   0x06,  "Land Mobile Numbering (ITU-T Rec. E.212)" },
918   {   0x07,  "spare" },
919   {   0x08,  "National Numbering" },
920   {   0x09,  "Private Numbering" },
921   {   0x0f,  "Reserved for extension" },
922   { 0, NULL }
923 };
924
925 /* End includes from old" packet-camel.c */
926
927 static const value_string camel_RP_Cause_values[] = {
928   { 1, "Unassigned (unallocated) number" },
929   { 8, "Operator determined barring" },
930   { 10, "Call barred" },
931   { 11, "Reserved" },
932   { 21, "Short message transfer rejected" },
933   { 27, "Destination out of order" },
934   { 28, "Unidentified subscriber" },
935   { 29, "Facility Rejected" },
936   { 30, "Unknown subscriber" },
937   { 38, "Network out of order" },
938   { 41, "Temporary failure" },
939   { 42, "Congestion" },
940   { 47, "Resources unavailable, unspecified" },
941   { 50, "Requested facility not subscribed" },
942   { 69, "Requested facility not implemented" },
943   { 81, "Invalid short message transfer reference value" },
944   { 95, "Semantically incorrect message" },
945   { 96, "Invalid mandatory information" },
946   { 97, " Message Type non-existent or not implemented" },
947   { 98, "Message not compatible with short message protocol state" },
948   { 99, "Information element non existent or not implemented" },
949   { 111, "Protocol error, unspecified" },
950   { 127, "Interworking, unspecified" },
951   { 22,"Memory capacity exceeded" },
952   { 0, NULL }
953 };
954
955 static const value_string camel_holdTreatmentIndicator_values[] = {
956   {   0x01,  "acceptHoldRequest" },
957   {   0x02,  "rejectHoldRequest" },
958   { 0, NULL }
959 };
960 static const value_string camel_cwTreatmentIndicator_values[] = {
961   {   0x01,  "acceptCw" },
962   {   0x02,  "rejectCw" },
963   { 0, NULL }
964 };
965 static const value_string camel_ectTreatmentIndicator_values[] = {
966   {   0x01,  "acceptEctRequest" },
967   {   0x02,  "rejectEctRequest" },
968   { 0, NULL }
969 };
970
971
972 /*--- Included file: packet-camel-val.h ---*/
973 #line 1 "../../asn1/camel/packet-camel-val.h"
974 #define tc_Messages                    "0.0.17.773.2.1.3"
975 #define tc_NotationExtensions          "0.0.17.775.2.4.1"
976 #define ros_InformationObjects         "2.4.5.0"
977 #define datatypes                      "0.4.0.0.1.3.52.7"
978 #define errortypes                     "0.4.0.0.1.3.51.7"
979 #define operationcodes                 "0.4.0.0.1.3.53.7"
980 #define errorcodes                     "0.4.0.0.1.3.57.7"
981 #define classes                        "0.4.0.0.1.3.54.7"
982 #define gsmSSF_gsmSCF_Operations       "0.4.0.0.1.3.101.7"
983 #define gsmSSF_gsmSCF_Protocol         "0.4.0.0.1.3.102.7"
984 #define gsmSCF_gsmSRF_Operations       "0.4.0.0.1.3.103.7"
985 #define gsmSCF_gsmSRF_Protocol         "0.4.0.0.1.3.104.7"
986 #define sms_Operations                 "0.4.0.0.1.3.105.7"
987 #define smsSSF_gsmSCF_Protocol         "0.4.0.0.1.3.106.7"
988 #define gprsSSF_gsmSCF_Operations      "0.4.0.0.1.3.107.7"
989 #define gprsSSF_gsmSCF_Protocol        "0.4.0.0.1.3.108.7"
990 #define id_CAP                         "0.4.0.0.1.22"
991 #define id_CAP3                        "0.4.0.0.1.20"
992 #define id_CAPOE                       "0.4.0.0.1.23"
993 #define id_CAP3OE                      "0.4.0.0.1.21"
994 #define id_ac                          id_CAP".3"
995 #define id_acE                         id_CAPOE".3"
996 #define id_ac3E                        id_CAP3OE".3"
997 #define id_as                          id_CAP".5"
998 #define id_asE                         id_CAPOE".5"
999 #define id_rosObject                   id_CAP".25"
1000 #define id_contract                    id_CAP".26"
1001 #define id_contract3                   id_CAP3".26"
1002 #define id_contractE                   id_CAPOE".26"
1003 #define id_package                     id_CAP".27"
1004 #define id_packageE                    id_CAPOE".27"
1005 #define id_rosObject_gsmSCF            id_rosObject".4"
1006 #define id_rosObject_gsmSSF            id_rosObject".5"
1007 #define id_rosObject_gsmSRF            id_rosObject".6"
1008 #define id_rosObject_gprsSSF           id_rosObject".7"
1009 #define id_rosObject_smsSSF_V3         id_rosObject".8"
1010 #define id_rosObject_smsSSF_V4         id_rosObject".9"
1011 #define id_ac_CAP_gsmSSF_scfGenericAC  id_acE".4"
1012 #define id_ac_CAP_gsmSSF_scfAssistHandoffAC id_acE".6"
1013 #define id_ac_CAP_scf_gsmSSFGenericAC  id_acE".8"
1014 #define id_ac_gsmSRF_gsmSCF            id_ac".14"
1015 #define id_ac_CAP_gprsSSF_gsmSCF_AC    id_ac3E".50"
1016 #define id_ac_CAP_gsmSCF_gprsSSF_AC    id_ac3E".51"
1017 #define id_ac_cap3_sms_AC              id_ac3E".61"
1018 #define id_ac_cap4_sms_AC              id_acE".61"
1019 #define id_CAPSsfToScfGeneric          id_contractE".3"
1020 #define id_CAPAssistHandoffssfToScf    id_contractE".5"
1021 #define id_CAPScfToSsfGeneric          id_contractE".6"
1022 #define id_contract_gsmSRF_gsmSCF      id_contract".13"
1023 #define id_capGprsSsfTogsmScf          id_contract".14"
1024 #define id_capGsmScfToGprsSsf          id_contract".15"
1025 #define id_cap3SmsSsfTogsmScf          id_contract3".16"
1026 #define id_cap4SmsSsfTogsmScf          id_contract".16"
1027 #define id_package_scfActivation       id_package".11"
1028 #define id_package_gsmSRF_scfActivationOfAssist id_package".15"
1029 #define id_package_assistConnectionEstablishment id_package".16"
1030 #define id_package_genericDisconnectResource id_package".17"
1031 #define id_package_nonAssistedConnectionEstablishment id_package".18"
1032 #define id_package_connect             id_package".19"
1033 #define id_package_callHandling        id_packageE".20"
1034 #define id_package_bcsmEventHandling   id_package".21"
1035 #define id_package_ssfCallProcessing   id_packageE".24"
1036 #define id_package_scfCallInitiation   id_package".25"
1037 #define id_package_timer               id_package".26"
1038 #define id_package_billing             id_package".27"
1039 #define id_package_charging            id_package".28"
1040 #define id_package_trafficManagement   id_package".29"
1041 #define id_package_callReport          id_package".32"
1042 #define id_package_signallingControl   id_package".33"
1043 #define id_package_activityTest        id_package".34"
1044 #define id_package_cancel              id_packageE".36"
1045 #define id_package_cphResponse         id_package".37"
1046 #define id_package_exceptionInform     id_package".38"
1047 #define id_package_playTone            id_package".39"
1048 #define id_package_specializedResourceControl id_package".42"
1049 #define id_package_gsmSRF_scfCancel    id_package".43"
1050 #define id_package_gprsContinue        id_package".49"
1051 #define id_package_gprsExceptionInformation id_package".50"
1052 #define id_package_gprsScfActivation   id_package".51"
1053 #define id_package_gprsConnect         id_package".52"
1054 #define id_package_gprsRelease         id_package".53"
1055 #define id_package_gprsEventHandling   id_package".54"
1056 #define id_package_gprsTimer           id_package".55"
1057 #define id_package_gprsBilling         id_package".56"
1058 #define id_package_gprsCharging        id_package".57"
1059 #define id_package_gprsActivityTest    id_package".58"
1060 #define id_package_gprsCancel          id_package".59"
1061 #define id_package_gprsChargeAdvice    id_package".60"
1062 #define id_package_smsActivation       id_package".61"
1063 #define id_package_smsConnect          id_package".62"
1064 #define id_package_smsContinue         id_package".63"
1065 #define id_package_smsRelease          id_package".64"
1066 #define id_package_smsEventHandling    id_package".65"
1067 #define id_package_smsBilling          id_package".66"
1068 #define id_package_smsTimer            id_package".67"
1069 #define id_as_gsmSSF_scfGenericAS      id_asE".4"
1070 #define id_as_assistHandoff_gsmSSF_scfAS id_asE".6"
1071 #define id_as_scf_gsmSSFGenericAS      id_asE".7"
1072 #define id_as_basic_gsmSRF_gsmSCF      id_as".14"
1073 #define id_as_gprsSSF_gsmSCF_AS        id_as".50"
1074 #define id_as_gsmSCF_gprsSSF_AS        id_as".51"
1075 #define id_as_smsSSF_gsmSCF_AS         id_as".61"
1076 #define leg1                           0x01
1077 #define leg2                           0x02
1078 #define maxSMS_AddressStringLength     11
1079 #define numOfInfoItems                 4
1080 #define errcode_canceled               0
1081 #define errcode_cancelFailed           1
1082 #define errcode_eTCFailed              3
1083 #define errcode_improperCallerResponse 4
1084 #define errcode_missingCustomerRecord  6
1085 #define errcode_missingParameter       7
1086 #define errcode_parameterOutOfRange    8
1087 #define errcode_requestedInfoError     10
1088 #define errcode_systemFailure          11
1089 #define errcode_taskRefused            12
1090 #define errcode_unavailableResource    13
1091 #define errcode_unexpectedComponentSequence 14
1092 #define errcode_unexpectedDataValue    15
1093 #define errcode_unexpectedParameter    16
1094 #define errcode_unknownLegID           17
1095 #define errcode_unknownPDPID           50
1096 #define errcode_unknownCSID            51
1097 #define opcode_initialDP               0
1098 #define opcode_assistRequestInstructions 16
1099 #define opcode_establishTemporaryConnection 17
1100 #define opcode_disconnectForwardConnection 18
1101 #define opcode_dFCWithArgument         86
1102 #define opcode_connectToResource       19
1103 #define opcode_connect                 20
1104 #define opcode_releaseCall             22
1105 #define opcode_requestReportBCSMEvent  23
1106 #define opcode_eventReportBCSM         24
1107 #define opcode_collectInformation      27
1108 #define opcode_continue                31
1109 #define opcode_initiateCallAttempt     32
1110 #define opcode_resetTimer              33
1111 #define opcode_furnishChargingInformation 34
1112 #define opcode_applyCharging           35
1113 #define opcode_applyChargingReport     36
1114 #define opcode_callGap                 41
1115 #define opcode_callInformationReport   44
1116 #define opcode_callInformationRequest  45
1117 #define opcode_sendChargingInformation 46
1118 #define opcode_playAnnouncement        47
1119 #define opcode_promptAndCollectUserInformation 48
1120 #define opcode_specializedResourceReport 49
1121 #define opcode_cancel                  53
1122 #define opcode_activityTest            55
1123 #define opcode_continueWithArgument    88
1124 #define opcode_disconnectLeg           90
1125 #define opcode_moveLeg                 93
1126 #define opcode_splitLeg                95
1127 #define opcode_entityReleased          96
1128 #define opcode_playTone                97
1129 #define opcode_initialDPSMS            60
1130 #define opcode_furnishChargingInformationSMS 61
1131 #define opcode_connectSMS              62
1132 #define opcode_requestReportSMSEvent   63
1133 #define opcode_eventReportSMS          64
1134 #define opcode_continueSMS             65
1135 #define opcode_releaseSMS              66
1136 #define opcode_resetTimerSMS           67
1137 #define opcode_activityTestGPRS        70
1138 #define opcode_applyChargingGPRS       71
1139 #define opcode_applyChargingReportGPRS 72
1140 #define opcode_cancelGPRS              73
1141 #define opcode_connectGPRS             74
1142 #define opcode_continueGPRS            75
1143 #define opcode_entityReleasedGPRS      76
1144 #define opcode_furnishChargingInformationGPRS 77
1145 #define opcode_initialDPGPRS           78
1146 #define opcode_releaseGPRS             79
1147 #define opcode_eventReportGPRS         80
1148 #define opcode_requestReportGPRSEvent  81
1149 #define opcode_resetTimerGPRS          82
1150 #define opcode_sendChargingInformationGPRS 83
1151 #define id_CAP_GPRS_ReferenceNumber    "0.4.0.0.1.1.5.2"
1152 #define id_CAP_U_ABORT_Reason          "0.4.0.0.1.1.2.2"
1153 #define noInvokeId                     NULL
1154
1155 /*--- End of included file: packet-camel-val.h ---*/
1156 #line 276 "../../asn1/camel/packet-camel-template.c"
1157
1158
1159 /*--- Included file: packet-camel-table.c ---*/
1160 #line 1 "../../asn1/camel/packet-camel-table.c"
1161
1162 /* CAMEL OPERATIONS */
1163 const value_string camel_opr_code_strings[] = {
1164         { opcode_playAnnouncement, "playAnnouncement" },
1165         { opcode_promptAndCollectUserInformation, "promptAndCollectUserInformation" },
1166         { opcode_specializedResourceReport, "specializedResourceReport" },
1167         { opcode_activityTest, "activityTest" },
1168         { opcode_applyCharging, "applyCharging" },
1169         { opcode_applyChargingReport, "applyChargingReport" },
1170         { opcode_assistRequestInstructions, "assistRequestInstructions" },
1171         { opcode_callGap, "callGap" },
1172         { opcode_callInformationReport, "callInformationReport" },
1173         { opcode_callInformationRequest, "callInformationRequest" },
1174         { opcode_cancel, "cancel" },
1175         { opcode_collectInformation, "collectInformation" },
1176         { opcode_connect, "connect" },
1177         { opcode_connectToResource, "connectToResource" },
1178         { opcode_continue, "continue" },
1179         { opcode_continueWithArgument, "continueWithArgument" },
1180         { opcode_disconnectForwardConnection, "disconnectForwardConnection" },
1181         { opcode_dFCWithArgument, "disconnectForwardConnectionWithArgument" },
1182         { opcode_disconnectLeg, "disconnectLeg" },
1183         { opcode_entityReleased, "entityReleased" },
1184         { opcode_establishTemporaryConnection, "establishTemporaryConnection" },
1185         { opcode_eventReportBCSM, "eventReportBCSM" },
1186         { opcode_furnishChargingInformation, "furnishChargingInformation" },
1187         { opcode_initialDP, "initialDP" },
1188         { opcode_initiateCallAttempt, "initiateCallAttempt" },
1189         { opcode_moveLeg, "moveLeg" },
1190         { opcode_playTone, "playTone" },
1191         { opcode_releaseCall, "releaseCall" },
1192         { opcode_requestReportBCSMEvent, "requestReportBCSMEvent" },
1193         { opcode_resetTimer, "resetTimer" },
1194         { opcode_sendChargingInformation, "sendChargingInformation" },
1195         { opcode_splitLeg, "splitLeg" },
1196         { opcode_activityTestGPRS, "activityTestGPRS" },
1197         { opcode_applyChargingGPRS, "applyChargingGPRS" },
1198         { opcode_applyChargingReportGPRS, "applyChargingReportGPRS" },
1199         { opcode_cancelGPRS, "cancelGPRS" },
1200         { opcode_connectGPRS, "connectGPRS" },
1201         { opcode_continueGPRS, "continueGPRS" },
1202         { opcode_entityReleasedGPRS, "entityReleasedGPRS" },
1203         { opcode_eventReportGPRS, "eventReportGPRS" },
1204         { opcode_furnishChargingInformationGPRS, "furnishChargingInformationGPRS" },
1205         { opcode_initialDPGPRS, "initialDPGPRS" },
1206         { opcode_releaseGPRS, "releaseGPRS" },
1207         { opcode_requestReportGPRSEvent, "requestReportGPRSEvent" },
1208         { opcode_resetTimerGPRS, "resetTimerGPRS" },
1209         { opcode_sendChargingInformationGPRS, "sendChargingInformationGPRS" },
1210         { opcode_connectSMS, "connectSMS" },
1211         { opcode_continueSMS, "continueSMS" },
1212         { opcode_eventReportSMS, "eventReportSMS" },
1213         { opcode_furnishChargingInformationSMS, "furnishChargingInformationSMS" },
1214         { opcode_initialDPSMS, "initialDPSMS" },
1215         { opcode_releaseSMS, "releaseSMS" },
1216         { opcode_requestReportSMSEvent, "requestReportSMSEvent" },
1217         { opcode_resetTimerSMS, "resetTimerSMS" },
1218   { 0, NULL }
1219 };
1220
1221
1222 /* CAMEL ERRORS */
1223 static const value_string camel_err_code_string_vals[] = {
1224         { errcode_canceled, "canceled" },
1225         { errcode_cancelFailed, "cancelFailed" },
1226         { errcode_eTCFailed, "eTCFailed" },
1227         { errcode_improperCallerResponse, "improperCallerResponse" },
1228         { errcode_missingCustomerRecord, "missingCustomerRecord" },
1229         { errcode_missingParameter, "missingParameter" },
1230         { errcode_parameterOutOfRange, "parameterOutOfRange" },
1231         { errcode_requestedInfoError, "requestedInfoError" },
1232         { errcode_systemFailure, "systemFailure" },
1233         { errcode_taskRefused, "taskRefused" },
1234         { errcode_unavailableResource, "unavailableResource" },
1235         { errcode_unexpectedComponentSequence, "unexpectedComponentSequence" },
1236         { errcode_unexpectedDataValue, "unexpectedDataValue" },
1237         { errcode_unexpectedParameter, "unexpectedParameter" },
1238         { errcode_unknownLegID, "unknownLegID" },
1239         { errcode_unknownCSID, "unknownCSID" },
1240         { errcode_unknownPDPID, "unknownPDPID" },
1241   { 0, NULL }
1242 };
1243
1244
1245 /*--- End of included file: packet-camel-table.c ---*/
1246 #line 278 "../../asn1/camel/packet-camel-template.c"
1247
1248 static char camel_number_to_char(int number)
1249 {
1250    if (number < 10)
1251    return (char) (number + 48 ); /* this is ASCII specific */
1252    else
1253    return (char) (number + 55 );
1254 }
1255
1256 /*
1257  * 24.011 8.2.5.4
1258  */
1259 static guint8
1260 dissect_RP_cause_ie(tvbuff_t *tvb, guint32 offset, _U_ guint len,
1261                     proto_tree *tree, int hf_cause_value, guint8 *cause_value)
1262 {
1263   guint8        oct;
1264   guint32       curr_offset;
1265   static char a_bigbuf[1024];
1266
1267   curr_offset = offset;
1268   oct = tvb_get_guint8(tvb, curr_offset);
1269
1270   *cause_value = oct & 0x7f;
1271
1272   other_decode_bitfield_value(a_bigbuf, oct, 0x7f, 8);
1273   proto_tree_add_uint_format(tree, hf_cause_value,
1274                              tvb, curr_offset, 1, *cause_value,
1275                              "%s : %s",
1276                              a_bigbuf,
1277                              val_to_str(*cause_value, camel_RP_Cause_values,
1278                                         "Unknown Cause (%u), treated as (41) \"Temporary failure\" for MO-SMS or (111) \"Protocol error,unspecified\" for MT-SMS"));
1279   curr_offset++;
1280
1281   if ((oct & 0x80)) {
1282     oct = tvb_get_guint8(tvb, curr_offset);
1283     proto_tree_add_uint_format(tree, hf_cause_value,
1284                                tvb, curr_offset, 1, oct,
1285                                "Diagnostic : %u", oct);
1286     curr_offset++;
1287   }
1288   return(curr_offset - offset);
1289 }
1290
1291 static int dissect_camel_InitialDPArgExtensionV2(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
1292
1293
1294 /*--- Included file: packet-camel-fn.c ---*/
1295 #line 1 "../../asn1/camel/packet-camel-fn.c"
1296
1297
1298 static int
1299 dissect_camel_AccessPointName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1300
1301   tvbuff_t   *parameter_tvb;
1302   proto_tree *subtree;
1303
1304   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
1305                                        &parameter_tvb);
1306
1307
1308   if (!parameter_tvb)
1309     return offset;
1310   subtree = proto_item_add_subtree(actx->created_item, ett_camel_AccessPointName);
1311   de_sm_apn(parameter_tvb, subtree, actx->pinfo, 0, tvb_length(parameter_tvb), NULL, 0);
1312
1313   return offset;
1314 }
1315
1316
1317
1318 static int
1319 dissect_camel_AChBillingChargingCharacteristics(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1320  tvbuff_t       *parameter_tvb;
1321  proto_tree *subtree;
1322
1323   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
1324                                        &parameter_tvb);
1325
1326  if (!parameter_tvb)
1327         return offset;
1328  subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_AChBillingChargingCharacteristics);
1329  if((camel_ver == 2)||(camel_ver == 1)){
1330         return  dissect_camel_CAMEL_AChBillingChargingCharacteristicsV2(FALSE, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_AChBillingChargingCharacteristics);
1331  }
1332  dissect_camel_CAMEL_AChBillingChargingCharacteristics(FALSE, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_AChBillingChargingCharacteristics);
1333
1334
1335   return offset;
1336 }
1337
1338
1339
1340 static int
1341 dissect_camel_CallSegmentID(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1342   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1343                                                 NULL);
1344
1345   return offset;
1346 }
1347
1348
1349 static const value_string camel_AChChargingAddress_vals[] = {
1350   {   2, "legID" },
1351   {  50, "srfConnection" },
1352   { 0, NULL }
1353 };
1354
1355 static const ber_choice_t AChChargingAddress_choice[] = {
1356   {   2, &hf_camel_legID         , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_inap_LegID },
1357   {  50, &hf_camel_srfConnection , BER_CLASS_CON, 50, BER_FLAGS_IMPLTAG, dissect_camel_CallSegmentID },
1358   { 0, NULL, 0, 0, 0, NULL }
1359 };
1360
1361 static int
1362 dissect_camel_AChChargingAddress(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1363   offset = dissect_ber_choice(actx, tree, tvb, offset,
1364                                  AChChargingAddress_choice, hf_index, ett_camel_AChChargingAddress,
1365                                  NULL);
1366
1367   return offset;
1368 }
1369
1370
1371
1372 static int
1373 dissect_camel_Digits(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1374   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
1375                                        NULL);
1376
1377   return offset;
1378 }
1379
1380
1381
1382 static int
1383 dissect_camel_AdditionalCallingPartyNumber(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1384   offset = dissect_camel_Digits(implicit_tag, tvb, offset, actx, tree, hf_index);
1385
1386   return offset;
1387 }
1388
1389
1390
1391 static int
1392 dissect_camel_AlertingPattern(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1393   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
1394                                        NULL);
1395
1396   return offset;
1397 }
1398
1399
1400
1401 static int
1402 dissect_camel_INTEGER_0_8191(gboolean 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);
1405
1406   return offset;
1407 }
1408
1409
1410 static const ber_sequence_t CAI_GSM0224_sequence[] = {
1411   { &hf_camel_e1            , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_8191 },
1412   { &hf_camel_e2            , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_8191 },
1413   { &hf_camel_e3            , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_8191 },
1414   { &hf_camel_e4            , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_8191 },
1415   { &hf_camel_e5            , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_8191 },
1416   { &hf_camel_e6            , BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_8191 },
1417   { &hf_camel_e7            , BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_8191 },
1418   { NULL, 0, 0, 0, NULL }
1419 };
1420
1421 static int
1422 dissect_camel_CAI_GSM0224(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1423   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1424                                    CAI_GSM0224_sequence, hf_index, ett_camel_CAI_GSM0224);
1425
1426   return offset;
1427 }
1428
1429
1430
1431 static int
1432 dissect_camel_INTEGER_1_86400(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1433   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1434                                                 NULL);
1435
1436   return offset;
1437 }
1438
1439
1440 static const ber_sequence_t AOCSubsequent_sequence[] = {
1441   { &hf_camel_cAI_GSM0224   , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_CAI_GSM0224 },
1442   { &hf_camel_aocSubsequent_tariffSwitchInterval, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_86400 },
1443   { NULL, 0, 0, 0, NULL }
1444 };
1445
1446 static int
1447 dissect_camel_AOCSubsequent(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1448   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1449                                    AOCSubsequent_sequence, hf_index, ett_camel_AOCSubsequent);
1450
1451   return offset;
1452 }
1453
1454
1455 static const ber_sequence_t AOCBeforeAnswer_sequence[] = {
1456   { &hf_camel_aOCInitial    , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_CAI_GSM0224 },
1457   { &hf_camel_aOCSubsequent , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_AOCSubsequent },
1458   { NULL, 0, 0, 0, NULL }
1459 };
1460
1461 static int
1462 dissect_camel_AOCBeforeAnswer(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1463   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1464                                    AOCBeforeAnswer_sequence, hf_index, ett_camel_AOCBeforeAnswer);
1465
1466   return offset;
1467 }
1468
1469
1470 static const ber_sequence_t AOCGPRS_sequence[] = {
1471   { &hf_camel_aOCInitial    , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_CAI_GSM0224 },
1472   { &hf_camel_aOCSubsequent , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_AOCSubsequent },
1473   { NULL, 0, 0, 0, NULL }
1474 };
1475
1476 static int
1477 dissect_camel_AOCGPRS(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1478   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1479                                    AOCGPRS_sequence, hf_index, ett_camel_AOCGPRS);
1480
1481   return offset;
1482 }
1483
1484
1485 static const value_string camel_AppendFreeFormatData_vals[] = {
1486   {   0, "overwrite" },
1487   {   1, "append" },
1488   { 0, NULL }
1489 };
1490
1491
1492 static int
1493 dissect_camel_AppendFreeFormatData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1494   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1495                                   NULL);
1496
1497   return offset;
1498 }
1499
1500
1501
1502 static int
1503 dissect_camel_ApplicationTimer(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1504   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1505                                                 NULL);
1506
1507   return offset;
1508 }
1509
1510
1511
1512 static int
1513 dissect_camel_AssistingSSPIPRoutingAddress(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1514   offset = dissect_camel_Digits(implicit_tag, tvb, offset, actx, tree, hf_index);
1515
1516   return offset;
1517 }
1518
1519
1520
1521 static int
1522 dissect_camel_BOOLEAN(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1523   offset = dissect_ber_boolean(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
1524
1525   return offset;
1526 }
1527
1528
1529
1530 static int
1531 dissect_camel_INTEGER_1_1200(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1532   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1533                                                 NULL);
1534
1535   return offset;
1536 }
1537
1538
1539
1540 static int
1541 dissect_camel_INTEGER_1_3(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1542   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1543                                                 NULL);
1544
1545   return offset;
1546 }
1547
1548
1549
1550 static int
1551 dissect_camel_INTEGER_1_20(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1552   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1553                                                 NULL);
1554
1555   return offset;
1556 }
1557
1558
1559 static const ber_sequence_t Burst_sequence[] = {
1560   { &hf_camel_numberOfBursts, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_3 },
1561   { &hf_camel_burstInterval , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_1200 },
1562   { &hf_camel_numberOfTonesInBurst, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_3 },
1563   { &hf_camel_burstToneDuration, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_20 },
1564   { &hf_camel_toneInterval  , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_20 },
1565   { NULL, 0, 0, 0, NULL }
1566 };
1567
1568 static int
1569 dissect_camel_Burst(gboolean 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_sequence(implicit_tag, actx, tree, tvb, offset,
1571                                    Burst_sequence, hf_index, ett_camel_Burst);
1572
1573   return offset;
1574 }
1575
1576
1577 static const ber_sequence_t BurstList_sequence[] = {
1578   { &hf_camel_warningPeriod , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_1200 },
1579   { &hf_camel_bursts        , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_Burst },
1580   { NULL, 0, 0, 0, NULL }
1581 };
1582
1583 static int
1584 dissect_camel_BurstList(gboolean 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                                    BurstList_sequence, hf_index, ett_camel_BurstList);
1587
1588   return offset;
1589 }
1590
1591
1592 static const value_string camel_AudibleIndicator_vals[] = {
1593   {   0, "tone" },
1594   {   1, "burstList" },
1595   { 0, NULL }
1596 };
1597
1598 static const ber_choice_t AudibleIndicator_choice[] = {
1599   {   0, &hf_camel_audibleIndicatorTone, BER_CLASS_UNI, BER_UNI_TAG_BOOLEAN, BER_FLAGS_NOOWNTAG, dissect_camel_BOOLEAN },
1600   {   1, &hf_camel_burstList     , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_BurstList },
1601   { 0, NULL, 0, 0, 0, NULL }
1602 };
1603
1604 static int
1605 dissect_camel_AudibleIndicator(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1606   offset = dissect_ber_choice(actx, tree, tvb, offset,
1607                                  AudibleIndicator_choice, hf_index, ett_camel_AudibleIndicator,
1608                                  NULL);
1609
1610   return offset;
1611 }
1612
1613
1614
1615 static int
1616 dissect_camel_OCTET_STRING_SIZE_1(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1617   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
1618                                        NULL);
1619
1620   return offset;
1621 }
1622
1623
1624 static const ber_sequence_t BackwardServiceInteractionInd_sequence[] = {
1625   { &hf_camel_conferenceTreatmentIndicator, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_OCTET_STRING_SIZE_1 },
1626   { &hf_camel_callCompletionTreatmentIndicator, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_OCTET_STRING_SIZE_1 },
1627   { NULL, 0, 0, 0, NULL }
1628 };
1629
1630 static int
1631 dissect_camel_BackwardServiceInteractionInd(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1632   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1633                                    BackwardServiceInteractionInd_sequence, hf_index, ett_camel_BackwardServiceInteractionInd);
1634
1635   return offset;
1636 }
1637
1638
1639 static const ber_sequence_t GapOnService_sequence[] = {
1640   { &hf_camel_serviceKey    , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_inap_ServiceKey },
1641   { NULL, 0, 0, 0, NULL }
1642 };
1643
1644 static int
1645 dissect_camel_GapOnService(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1646   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1647                                    GapOnService_sequence, hf_index, ett_camel_GapOnService);
1648
1649   return offset;
1650 }
1651
1652
1653 static const ber_sequence_t T_calledAddressAndService_sequence[] = {
1654   { &hf_camel_calledAddressValue, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_Digits },
1655   { &hf_camel_serviceKey    , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_inap_ServiceKey },
1656   { NULL, 0, 0, 0, NULL }
1657 };
1658
1659 static int
1660 dissect_camel_T_calledAddressAndService(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1661   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1662                                    T_calledAddressAndService_sequence, hf_index, ett_camel_T_calledAddressAndService);
1663
1664   return offset;
1665 }
1666
1667
1668 static const ber_sequence_t T_callingAddressAndService_sequence[] = {
1669   { &hf_camel_callingAddressValue, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_Digits },
1670   { &hf_camel_serviceKey    , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_inap_ServiceKey },
1671   { NULL, 0, 0, 0, NULL }
1672 };
1673
1674 static int
1675 dissect_camel_T_callingAddressAndService(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1676   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1677                                    T_callingAddressAndService_sequence, hf_index, ett_camel_T_callingAddressAndService);
1678
1679   return offset;
1680 }
1681
1682
1683 static const value_string camel_BasicGapCriteria_vals[] = {
1684   {   0, "calledAddressValue" },
1685   {   2, "gapOnService" },
1686   {  29, "calledAddressAndService" },
1687   {  30, "callingAddressAndService" },
1688   { 0, NULL }
1689 };
1690
1691 static const ber_choice_t BasicGapCriteria_choice[] = {
1692   {   0, &hf_camel_calledAddressValue, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_Digits },
1693   {   2, &hf_camel_gapOnService  , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_camel_GapOnService },
1694   {  29, &hf_camel_calledAddressAndService, BER_CLASS_CON, 29, BER_FLAGS_IMPLTAG, dissect_camel_T_calledAddressAndService },
1695   {  30, &hf_camel_callingAddressAndService, BER_CLASS_CON, 30, BER_FLAGS_IMPLTAG, dissect_camel_T_callingAddressAndService },
1696   { 0, NULL, 0, 0, 0, NULL }
1697 };
1698
1699 static int
1700 dissect_camel_BasicGapCriteria(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1701   offset = dissect_ber_choice(actx, tree, tvb, offset,
1702                                  BasicGapCriteria_choice, hf_index, ett_camel_BasicGapCriteria,
1703                                  NULL);
1704
1705   return offset;
1706 }
1707
1708
1709 static const value_string camel_EventTypeBCSM_vals[] = {
1710   {   2, "collectedInfo" },
1711   {   3, "analyzedInformation" },
1712   {   4, "routeSelectFailure" },
1713   {   5, "oCalledPartyBusy" },
1714   {   6, "oNoAnswer" },
1715   {   7, "oAnswer" },
1716   {   8, "oMidCall" },
1717   {   9, "oDisconnect" },
1718   {  10, "oAbandon" },
1719   {  12, "termAttemptAuthorized" },
1720   {  13, "tBusy" },
1721   {  14, "tNoAnswer" },
1722   {  15, "tAnswer" },
1723   {  16, "tMidCall" },
1724   {  17, "tDisconnect" },
1725   {  18, "tAbandon" },
1726   {  19, "oTermSeized" },
1727   {  27, "callAccepted" },
1728   {  50, "oChangeOfPosition" },
1729   {  51, "tChangeOfPosition" },
1730   {  52, "oServiceChange" },
1731   {  53, "tServiceChange" },
1732   { 0, NULL }
1733 };
1734
1735
1736 static int
1737 dissect_camel_EventTypeBCSM(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1738   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1739                                   NULL);
1740
1741   return offset;
1742 }
1743
1744
1745 static const value_string camel_MonitorMode_vals[] = {
1746   {   0, "interrupted" },
1747   {   1, "notifyAndContinue" },
1748   {   2, "transparent" },
1749   { 0, NULL }
1750 };
1751
1752
1753 static int
1754 dissect_camel_MonitorMode(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1755   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1756                                   NULL);
1757
1758   return offset;
1759 }
1760
1761
1762
1763 static int
1764 dissect_camel_INTEGER_1_30(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1765   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1766                                                 NULL);
1767
1768   return offset;
1769 }
1770
1771
1772
1773 static int
1774 dissect_camel_OCTET_STRING_SIZE_1_2(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1775   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
1776                                        NULL);
1777
1778   return offset;
1779 }
1780
1781
1782
1783 static int
1784 dissect_camel_INTEGER_1_127(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1785   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1786                                                 NULL);
1787
1788   return offset;
1789 }
1790
1791
1792 static const ber_sequence_t MidCallControlInfo_sequence[] = {
1793   { &hf_camel_minimumNumberOfDigits, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_30 },
1794   { &hf_camel_maximumNumberOfDigits, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_30 },
1795   { &hf_camel_endOfReplyDigit, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_OCTET_STRING_SIZE_1_2 },
1796   { &hf_camel_cancelDigit   , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_OCTET_STRING_SIZE_1_2 },
1797   { &hf_camel_startDigit    , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_OCTET_STRING_SIZE_1_2 },
1798   { &hf_camel_interDigitTimeout, BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_127 },
1799   { NULL, 0, 0, 0, NULL }
1800 };
1801
1802 static int
1803 dissect_camel_MidCallControlInfo(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1804   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1805                                    MidCallControlInfo_sequence, hf_index, ett_camel_MidCallControlInfo);
1806
1807   return offset;
1808 }
1809
1810
1811
1812 static int
1813 dissect_camel_NULL(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1814   offset = dissect_ber_null(implicit_tag, actx, tree, tvb, offset, hf_index);
1815
1816   return offset;
1817 }
1818
1819
1820 static const ber_sequence_t ChangeOfLocationAlt_sequence[] = {
1821   { NULL, 0, 0, 0, NULL }
1822 };
1823
1824 static int
1825 dissect_camel_ChangeOfLocationAlt(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1826   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1827                                    ChangeOfLocationAlt_sequence, hf_index, ett_camel_ChangeOfLocationAlt);
1828
1829   return offset;
1830 }
1831
1832
1833 static const value_string camel_ChangeOfLocation_vals[] = {
1834   {   0, "cellGlobalId" },
1835   {   1, "serviceAreaId" },
1836   {   2, "locationAreaId" },
1837   {   3, "inter-SystemHandOver" },
1838   {   4, "inter-PLMNHandOver" },
1839   {   5, "inter-MSCHandOver" },
1840   {   6, "changeOfLocationAlt" },
1841   { 0, NULL }
1842 };
1843
1844 static const ber_choice_t ChangeOfLocation_choice[] = {
1845   {   0, &hf_camel_cellGlobalId  , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_gsm_map_CellGlobalIdOrServiceAreaIdFixedLength },
1846   {   1, &hf_camel_serviceAreaId , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_gsm_map_CellGlobalIdOrServiceAreaIdFixedLength },
1847   {   2, &hf_camel_locationAreaId, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_gsm_map_LAIFixedLength },
1848   {   3, &hf_camel_inter_SystemHandOver, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_camel_NULL },
1849   {   4, &hf_camel_inter_PLMNHandOver, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_camel_NULL },
1850   {   5, &hf_camel_inter_MSCHandOver, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_camel_NULL },
1851   {   6, &hf_camel_changeOfLocationAlt, BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_camel_ChangeOfLocationAlt },
1852   { 0, NULL, 0, 0, 0, NULL }
1853 };
1854
1855 static int
1856 dissect_camel_ChangeOfLocation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1857   offset = dissect_ber_choice(actx, tree, tvb, offset,
1858                                  ChangeOfLocation_choice, hf_index, ett_camel_ChangeOfLocation,
1859                                  NULL);
1860
1861   return offset;
1862 }
1863
1864
1865 static const ber_sequence_t ChangeOfPositionControlInfo_sequence_of[1] = {
1866   { &hf_camel_ChangeOfPositionControlInfo_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_ChangeOfLocation },
1867 };
1868
1869 static int
1870 dissect_camel_ChangeOfPositionControlInfo(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1871   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
1872                                       ChangeOfPositionControlInfo_sequence_of, hf_index, ett_camel_ChangeOfPositionControlInfo);
1873
1874   return offset;
1875 }
1876
1877
1878
1879 static int
1880 dissect_camel_NumberOfDigits(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1881   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1882                                                 NULL);
1883
1884   return offset;
1885 }
1886
1887
1888 static const ber_sequence_t DpSpecificCriteriaAlt_sequence[] = {
1889   { &hf_camel_changeOfPositionControlInfo, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_ChangeOfPositionControlInfo },
1890   { &hf_camel_numberOfDigits, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NumberOfDigits },
1891   { &hf_camel_interDigitTimeout, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_127 },
1892   { NULL, 0, 0, 0, NULL }
1893 };
1894
1895 static int
1896 dissect_camel_DpSpecificCriteriaAlt(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1897   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1898                                    DpSpecificCriteriaAlt_sequence, hf_index, ett_camel_DpSpecificCriteriaAlt);
1899
1900   return offset;
1901 }
1902
1903
1904 static const value_string camel_DpSpecificCriteria_vals[] = {
1905   {   1, "applicationTimer" },
1906   {   2, "midCallControlInfo" },
1907   {   3, "dpSpecificCriteriaAlt" },
1908   { 0, NULL }
1909 };
1910
1911 static const ber_choice_t DpSpecificCriteria_choice[] = {
1912   {   1, &hf_camel_applicationTimer, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_ApplicationTimer },
1913   {   2, &hf_camel_midCallControlInfo, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_camel_MidCallControlInfo },
1914   {   3, &hf_camel_dpSpecificCriteriaAlt, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_camel_DpSpecificCriteriaAlt },
1915   { 0, NULL, 0, 0, 0, NULL }
1916 };
1917
1918 static int
1919 dissect_camel_DpSpecificCriteria(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1920   offset = dissect_ber_choice(actx, tree, tvb, offset,
1921                                  DpSpecificCriteria_choice, hf_index, ett_camel_DpSpecificCriteria,
1922                                  NULL);
1923
1924   return offset;
1925 }
1926
1927
1928 static const ber_sequence_t BCSMEvent_sequence[] = {
1929   { &hf_camel_eventTypeBCSM , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_EventTypeBCSM },
1930   { &hf_camel_monitorMode   , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_MonitorMode },
1931   { &hf_camel_legID         , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_inap_LegID },
1932   { &hf_camel_dpSpecificCriteria, BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_DpSpecificCriteria },
1933   { &hf_camel_automaticRearm, BER_CLASS_CON, 50, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NULL },
1934   { NULL, 0, 0, 0, NULL }
1935 };
1936
1937 static int
1938 dissect_camel_BCSMEvent(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1939   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1940                                    BCSMEvent_sequence, hf_index, ett_camel_BCSMEvent);
1941
1942   return offset;
1943 }
1944
1945
1946
1947 static int
1948 dissect_camel_Cause(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1949
1950 tvbuff_t *parameter_tvb;
1951 guint8 Cause_value;
1952 proto_tree *subtree;
1953
1954   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
1955                                        &parameter_tvb);
1956
1957
1958  if (!parameter_tvb)
1959         return offset;
1960  subtree = proto_item_add_subtree(actx->created_item, ett_camel_cause);
1961
1962  dissect_q931_cause_ie(parameter_tvb, 0, tvb_length_remaining(parameter_tvb,0), subtree, hf_camel_cause_indicator, &Cause_value, isup_parameter_type_value);
1963
1964   return offset;
1965 }
1966
1967
1968 static const ber_sequence_t BCSM_Failure_sequence[] = {
1969   { &hf_camel_legID         , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_inap_LegID },
1970   { &hf_camel_cause         , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Cause },
1971   { NULL, 0, 0, 0, NULL }
1972 };
1973
1974 static int
1975 dissect_camel_BCSM_Failure(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1976   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1977                                    BCSM_Failure_sequence, hf_index, ett_camel_BCSM_Failure);
1978
1979   return offset;
1980 }
1981
1982
1983
1984 static int
1985 dissect_camel_T_bearerCap(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1986  tvbuff_t       *parameter_tvb;
1987
1988   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
1989                                        &parameter_tvb);
1990
1991
1992  if (!parameter_tvb)
1993         return offset;
1994
1995  dissect_q931_bearer_capability_ie(parameter_tvb, 0, tvb_length_remaining(parameter_tvb,0), tree);
1996
1997   return offset;
1998 }
1999
2000
2001 static const value_string camel_BearerCapability_vals[] = {
2002   {   0, "bearerCap" },
2003   { 0, NULL }
2004 };
2005
2006 static const ber_choice_t BearerCapability_choice[] = {
2007   {   0, &hf_camel_bearerCap     , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_T_bearerCap },
2008   { 0, NULL, 0, 0, 0, NULL }
2009 };
2010
2011 static int
2012 dissect_camel_BearerCapability(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2013   offset = dissect_ber_choice(actx, tree, tvb, offset,
2014                                  BearerCapability_choice, hf_index, ett_camel_BearerCapability,
2015                                  NULL);
2016
2017   return offset;
2018 }
2019
2020
2021
2022 static int
2023 dissect_camel_CalledPartyBCDNumber(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2024 /* See 3GPP TS 29.078
2025  * and 3GPP TS 24.008, section 10.5.4.7
2026  * Indicates the Called Party Number, including service selection information.
2027  * Refer to 3GPP TS 24.008 [9] for encoding.
2028  * This data type carries only the 'type of number', 'numbering plan
2029  * identification' and 'number digit' fields defined in 3GPP TS 24.008 [9];
2030  * it does not carry the 'called party BCD number IEI' or 'length of called
2031  * party BCD number contents'.
2032  * In the context of the DestinationSubscriberNumber field in ConnectSMSArg or 
2033  * InitialDPSMSArg, a CalledPartyBCDNumber may also contain an alphanumeric 
2034  * character string. In this case, type-of-number '101'B is used, in accordance 
2035  * with 3GPP TS 23.040 [6]. The address is coded in accordance with the 
2036  * GSM 7-bit default alphabet definition and the SMS packing rules 
2037  * as specified in 3GPP TS 23.038 [15] in this case.
2038  */
2039  tvbuff_t       *parameter_tvb; 
2040  proto_tree *subtree; 
2041
2042   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
2043                                        &parameter_tvb);
2044
2045
2046  if (!parameter_tvb)
2047         return offset;
2048  subtree = proto_item_add_subtree(actx->created_item, ett_camel_calledpartybcdnumber);
2049  de_cld_party_bcd_num(parameter_tvb, subtree, actx->pinfo, 0, tvb_length(parameter_tvb), NULL, 0);
2050
2051
2052   return offset;
2053 }
2054
2055
2056
2057 static int
2058 dissect_camel_CalledPartyNumber(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2059   tvbuff_t *parameter_tvb;
2060   proto_tree *subtree;
2061
2062   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
2063                                        &parameter_tvb);
2064
2065
2066  if (!parameter_tvb)
2067         return offset;
2068
2069  subtree = proto_item_add_subtree(actx->created_item, ett_camel_calledpartybcdnumber);
2070  dissect_isup_called_party_number_parameter(parameter_tvb, subtree, NULL);
2071
2072   return offset;
2073 }
2074
2075
2076
2077 static int
2078 dissect_camel_CallingPartyNumber(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2079   tvbuff_t *parameter_tvb;
2080   proto_tree *subtree;
2081
2082   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
2083                                        &parameter_tvb);
2084
2085
2086  if (!parameter_tvb)
2087         return offset;
2088
2089 subtree = proto_item_add_subtree(actx->created_item, ett_camel_callingpartynumber);
2090 dissect_isup_calling_party_number_parameter(parameter_tvb, subtree, NULL);
2091
2092   return offset;
2093 }
2094
2095
2096
2097 static int
2098 dissect_camel_CallResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2099  tvbuff_t       *parameter_tvb; 
2100  proto_tree *subtree; 
2101
2102   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
2103                                        &parameter_tvb);
2104
2105  if (!parameter_tvb)
2106         return offset;
2107  subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_CallResult);
2108  dissect_camel_CAMEL_CallResult(FALSE, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_CallResult);
2109
2110
2111   return offset;
2112 }
2113
2114
2115 static const ber_sequence_t CallSegmentFailure_sequence[] = {
2116   { &hf_camel_callSegmentID , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_CallSegmentID },
2117   { &hf_camel_cause         , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Cause },
2118   { NULL, 0, 0, 0, NULL }
2119 };
2120
2121 static int
2122 dissect_camel_CallSegmentFailure(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2123   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2124                                    CallSegmentFailure_sequence, hf_index, ett_camel_CallSegmentFailure);
2125
2126   return offset;
2127 }
2128
2129
2130
2131 static int
2132 dissect_camel_InvokeID(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2133   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2134                                                 NULL);
2135
2136   return offset;
2137 }
2138
2139
2140 static const ber_sequence_t CallSegmentToCancel_sequence[] = {
2141   { &hf_camel_invokeID      , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_InvokeID },
2142   { &hf_camel_callSegmentID , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_CallSegmentID },
2143   { NULL, 0, 0, 0, NULL }
2144 };
2145
2146 static int
2147 dissect_camel_CallSegmentToCancel(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2148   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2149                                    CallSegmentToCancel_sequence, hf_index, ett_camel_CallSegmentToCancel);
2150
2151   return offset;
2152 }
2153
2154
2155
2156 static int
2157 dissect_camel_INTEGER_1_864000(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2158   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2159                                                 NULL);
2160
2161   return offset;
2162 }
2163
2164
2165
2166 static int
2167 dissect_camel_T_audibleIndicator(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2168   if (tvb_length_remaining(tvb,offset) < 2)
2169         offset = dissect_camel_BOOLEAN(TRUE, tvb, offset, actx , tree, hf_camel_audibleIndicatorTone);
2170   else
2171   offset = dissect_camel_AudibleIndicator(implicit_tag, tvb, offset, actx, tree, hf_index);
2172
2173
2174
2175   return offset;
2176 }
2177
2178
2179
2180 static int
2181 dissect_camel_T_local(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2182
2183   if (is_ExtensionField){
2184         hf_index = hf_camel_extension_code_local;
2185   }else if (camel_opcode_type == CAMEL_OPCODE_RETURN_ERROR){
2186         hf_index = hf_camel_error_code_local;
2187   }
2188     offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2189                                                 &opcode);
2190
2191   if (is_ExtensionField == FALSE){
2192         if (camel_opcode_type == CAMEL_OPCODE_RETURN_ERROR){
2193           errorCode = opcode;
2194           col_append_str(actx->pinfo->cinfo, COL_INFO,
2195               val_to_str(errorCode, camel_err_code_string_vals, "Unknown CAMEL error (%u)"));
2196           col_append_str(actx->pinfo->cinfo, COL_INFO, " ");
2197           col_set_fence(actx->pinfo->cinfo, COL_INFO);
2198         }else{
2199           col_append_str(actx->pinfo->cinfo, COL_INFO,
2200              val_to_str(opcode, camel_opr_code_strings, "Unknown CAMEL (%u)"));
2201           col_append_str(actx->pinfo->cinfo, COL_INFO, " ");
2202           col_set_fence(actx->pinfo->cinfo, COL_INFO);
2203         }
2204         gp_camelsrt_info->opcode=opcode;
2205   }
2206
2207   return offset;
2208 }
2209
2210
2211
2212 static int
2213 dissect_camel_T_global(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2214   offset = dissect_ber_object_identifier_str(implicit_tag, actx, tree, tvb, offset, hf_index, &camel_obj_id);
2215
2216   return offset;
2217 }
2218
2219
2220 static const value_string camel_Code_vals[] = {
2221   {   0, "local" },
2222   {   1, "global" },
2223   { 0, NULL }
2224 };
2225
2226 static const ber_choice_t Code_choice[] = {
2227   {   0, &hf_camel_local         , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_camel_T_local },
2228   {   1, &hf_camel_global        , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_camel_T_global },
2229   { 0, NULL, 0, 0, 0, NULL }
2230 };
2231
2232 static int
2233 dissect_camel_Code(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2234   offset = dissect_ber_choice(actx, tree, tvb, offset,
2235                                  Code_choice, hf_index, ett_camel_Code,
2236                                  NULL);
2237
2238   return offset;
2239 }
2240
2241
2242
2243 static int
2244 dissect_camel_T_value(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2245   /*XXX handle local form here */
2246   if(camel_obj_id){
2247     offset=call_ber_oid_callback(camel_obj_id, tvb, offset, actx->pinfo, tree);
2248   }
2249   is_ExtensionField = FALSE;
2250
2251
2252   return offset;
2253 }
2254
2255
2256 static const ber_sequence_t ExtensionField_sequence[] = {
2257   { &hf_camel_type          , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_Code },
2258   { &hf_camel_criticality   , BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_inap_CriticalityType },
2259   { &hf_camel_value         , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_T_value },
2260   { NULL, 0, 0, 0, NULL }
2261 };
2262
2263 static int
2264 dissect_camel_ExtensionField(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2265         camel_obj_id = NULL;
2266         is_ExtensionField =TRUE;
2267
2268   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2269                                    ExtensionField_sequence, hf_index, ett_camel_ExtensionField);
2270
2271   return offset;
2272 }
2273
2274
2275 static const ber_sequence_t Extensions_sequence_of[1] = {
2276   { &hf_camel_Extensions_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_camel_ExtensionField },
2277 };
2278
2279 static int
2280 dissect_camel_Extensions(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2281   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
2282                                       Extensions_sequence_of, hf_index, ett_camel_Extensions);
2283
2284   return offset;
2285 }
2286
2287
2288 static const ber_sequence_t T_timeDurationCharging_sequence[] = {
2289   { &hf_camel_maxCallPeriodDuration, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_864000 },
2290   { &hf_camel_releaseIfdurationExceeded, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_BOOLEAN },
2291   { &hf_camel_timeDurationCharging_tariffSwitchInterval, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_86400 },
2292   { &hf_camel_audibleIndicator, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_T_audibleIndicator },
2293   { &hf_camel_extensions    , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Extensions },
2294   { NULL, 0, 0, 0, NULL }
2295 };
2296
2297 static int
2298 dissect_camel_T_timeDurationCharging(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2299   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2300                                    T_timeDurationCharging_sequence, hf_index, ett_camel_T_timeDurationCharging);
2301
2302   return offset;
2303 }
2304
2305
2306 static const value_string camel_CAMEL_AChBillingChargingCharacteristics_vals[] = {
2307   {   0, "timeDurationCharging" },
2308   { 0, NULL }
2309 };
2310
2311 static const ber_choice_t CAMEL_AChBillingChargingCharacteristics_choice[] = {
2312   {   0, &hf_camel_timeDurationCharging, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_T_timeDurationCharging },
2313   { 0, NULL, 0, 0, 0, NULL }
2314 };
2315
2316 static int
2317 dissect_camel_CAMEL_AChBillingChargingCharacteristics(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2318   offset = dissect_ber_choice(actx, tree, tvb, offset,
2319                                  CAMEL_AChBillingChargingCharacteristics_choice, hf_index, ett_camel_CAMEL_AChBillingChargingCharacteristics,
2320                                  NULL);
2321
2322   return offset;
2323 }
2324
2325
2326
2327 static int
2328 dissect_camel_LegType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2329   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
2330                                        NULL);
2331
2332   return offset;
2333 }
2334
2335
2336 static const value_string camel_ReceivingSideID_vals[] = {
2337   {   1, "receivingSideID" },
2338   { 0, NULL }
2339 };
2340
2341 static const ber_choice_t ReceivingSideID_choice[] = {
2342   {   1, &hf_camel_receivingSideID, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_LegType },
2343   { 0, NULL, 0, 0, 0, NULL }
2344 };
2345
2346 static int
2347 dissect_camel_ReceivingSideID(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2348   offset = dissect_ber_choice(actx, tree, tvb, offset,
2349                                  ReceivingSideID_choice, hf_index, ett_camel_ReceivingSideID,
2350                                  NULL);
2351
2352   return offset;
2353 }
2354
2355
2356
2357 static int
2358 dissect_camel_TimeIfNoTariffSwitch(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2359   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2360                                                 NULL);
2361
2362   return offset;
2363 }
2364
2365
2366
2367 static int
2368 dissect_camel_INTEGER_0_864000(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2369   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2370                                                 NULL);
2371
2372   return offset;
2373 }
2374
2375
2376 static const ber_sequence_t TimeIfTariffSwitch_sequence[] = {
2377   { &hf_camel_timeSinceTariffSwitch, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_864000 },
2378   { &hf_camel_timeIfTariffSwitch_tariffSwitchInterval, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_864000 },
2379   { NULL, 0, 0, 0, NULL }
2380 };
2381
2382 static int
2383 dissect_camel_TimeIfTariffSwitch(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2384   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2385                                    TimeIfTariffSwitch_sequence, hf_index, ett_camel_TimeIfTariffSwitch);
2386
2387   return offset;
2388 }
2389
2390
2391 static const value_string camel_TimeInformation_vals[] = {
2392   {   0, "timeIfNoTariffSwitch" },
2393   {   1, "timeIfTariffSwitch" },
2394   { 0, NULL }
2395 };
2396
2397 static const ber_choice_t TimeInformation_choice[] = {
2398   {   0, &hf_camel_timeIfNoTariffSwitch, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_TimeIfNoTariffSwitch },
2399   {   1, &hf_camel_timeIfTariffSwitch, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_TimeIfTariffSwitch },
2400   { 0, NULL, 0, 0, 0, NULL }
2401 };
2402
2403 static int
2404 dissect_camel_TimeInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2405   offset = dissect_ber_choice(actx, tree, tvb, offset,
2406                                  TimeInformation_choice, hf_index, ett_camel_TimeInformation,
2407                                  NULL);
2408
2409   return offset;
2410 }
2411
2412
2413 static const ber_sequence_t T_timeDurationChargingResult_sequence[] = {
2414   { &hf_camel_timeDurationChargingResultpartyToCharge, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_ReceivingSideID },
2415   { &hf_camel_timeInformation, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_TimeInformation },
2416   { &hf_camel_legActive     , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_BOOLEAN },
2417   { &hf_camel_callLegReleasedAtTcpExpiry, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NULL },
2418   { &hf_camel_extensions    , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Extensions },
2419   { &hf_camel_aChChargingAddress, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_AChChargingAddress },
2420   { NULL, 0, 0, 0, NULL }
2421 };
2422
2423 static int
2424 dissect_camel_T_timeDurationChargingResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2425   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2426                                    T_timeDurationChargingResult_sequence, hf_index, ett_camel_T_timeDurationChargingResult);
2427
2428   return offset;
2429 }
2430
2431
2432 static const value_string camel_CAMEL_CallResult_vals[] = {
2433   {   0, "timeDurationChargingResult" },
2434   { 0, NULL }
2435 };
2436
2437 static const ber_choice_t CAMEL_CallResult_choice[] = {
2438   {   0, &hf_camel_timeDurationChargingResult, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_T_timeDurationChargingResult },
2439   { 0, NULL, 0, 0, 0, NULL }
2440 };
2441
2442 static int
2443 dissect_camel_CAMEL_CallResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2444   offset = dissect_ber_choice(actx, tree, tvb, offset,
2445                                  CAMEL_CallResult_choice, hf_index, ett_camel_CAMEL_CallResult,
2446                                  NULL);
2447
2448   return offset;
2449 }
2450
2451
2452
2453 static int
2454 dissect_camel_OCTET_STRING_SIZE_bound__minFCIBillingChargingDataLength_bound__maxFCIBillingChargingDataLength(gboolean 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_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
2456                                        NULL);
2457
2458   return offset;
2459 }
2460
2461
2462 static const value_string camel_SendingSideID_vals[] = {
2463   {   0, "sendingSideID" },
2464   { 0, NULL }
2465 };
2466
2467 static const ber_choice_t SendingSideID_choice[] = {
2468   {   0, &hf_camel_sendingSideID , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_LegType },
2469   { 0, NULL, 0, 0, 0, NULL }
2470 };
2471
2472 static int
2473 dissect_camel_SendingSideID(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2474   offset = dissect_ber_choice(actx, tree, tvb, offset,
2475                                  SendingSideID_choice, hf_index, ett_camel_SendingSideID,
2476                                  NULL);
2477
2478   return offset;
2479 }
2480
2481
2482 static const ber_sequence_t T_fci_fCIBCCCAMELsequence1_sequence[] = {
2483   { &hf_camel_freeFormatData, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_OCTET_STRING_SIZE_bound__minFCIBillingChargingDataLength_bound__maxFCIBillingChargingDataLength },
2484   { &hf_camel_fCIBCCCAMELsequence1partyToCharge, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_SendingSideID },
2485   { &hf_camel_appendFreeFormatData, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_AppendFreeFormatData },
2486   { NULL, 0, 0, 0, NULL }
2487 };
2488
2489 static int
2490 dissect_camel_T_fci_fCIBCCCAMELsequence1(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2491   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2492                                    T_fci_fCIBCCCAMELsequence1_sequence, hf_index, ett_camel_T_fci_fCIBCCCAMELsequence1);
2493
2494   return offset;
2495 }
2496
2497
2498 static const value_string camel_CAMEL_FCIBillingChargingCharacteristics_vals[] = {
2499   {   0, "fCIBCCCAMELsequence1" },
2500   { 0, NULL }
2501 };
2502
2503 static const ber_choice_t CAMEL_FCIBillingChargingCharacteristics_choice[] = {
2504   {   0, &hf_camel_fci_fCIBCCCAMELsequence1, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_T_fci_fCIBCCCAMELsequence1 },
2505   { 0, NULL, 0, 0, 0, NULL }
2506 };
2507
2508 static int
2509 dissect_camel_CAMEL_FCIBillingChargingCharacteristics(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2510   offset = dissect_ber_choice(actx, tree, tvb, offset,
2511                                  CAMEL_FCIBillingChargingCharacteristics_choice, hf_index, ett_camel_CAMEL_FCIBillingChargingCharacteristics,
2512                                  NULL);
2513
2514   return offset;
2515 }
2516
2517
2518
2519 static int
2520 dissect_camel_PDPID(gboolean 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_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
2522                                        NULL);
2523
2524   return offset;
2525 }
2526
2527
2528 static const ber_sequence_t T_fciGPRS_fCIBCCCAMELsequence1_sequence[] = {
2529   { &hf_camel_freeFormatData, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_OCTET_STRING_SIZE_bound__minFCIBillingChargingDataLength_bound__maxFCIBillingChargingDataLength },
2530   { &hf_camel_pDPID         , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_PDPID },
2531   { &hf_camel_appendFreeFormatData, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_AppendFreeFormatData },
2532   { NULL, 0, 0, 0, NULL }
2533 };
2534
2535 static int
2536 dissect_camel_T_fciGPRS_fCIBCCCAMELsequence1(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2537   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2538                                    T_fciGPRS_fCIBCCCAMELsequence1_sequence, hf_index, ett_camel_T_fciGPRS_fCIBCCCAMELsequence1);
2539
2540   return offset;
2541 }
2542
2543
2544 static const ber_sequence_t CAMEL_FCIGPRSBillingChargingCharacteristics_sequence[] = {
2545   { &hf_camel_fciGPRS_fCIBCCCAMELsequence1, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_T_fciGPRS_fCIBCCCAMELsequence1 },
2546   { NULL, 0, 0, 0, NULL }
2547 };
2548
2549 static int
2550 dissect_camel_CAMEL_FCIGPRSBillingChargingCharacteristics(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2551   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2552                                    CAMEL_FCIGPRSBillingChargingCharacteristics_sequence, hf_index, ett_camel_CAMEL_FCIGPRSBillingChargingCharacteristics);
2553
2554   return offset;
2555 }
2556
2557
2558 static const ber_sequence_t T_fciSMS_fCIBCCCAMELsequence1_sequence[] = {
2559   { &hf_camel_freeFormatData, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_OCTET_STRING_SIZE_bound__minFCIBillingChargingDataLength_bound__maxFCIBillingChargingDataLength },
2560   { &hf_camel_appendFreeFormatData, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_AppendFreeFormatData },
2561   { NULL, 0, 0, 0, NULL }
2562 };
2563
2564 static int
2565 dissect_camel_T_fciSMS_fCIBCCCAMELsequence1(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2566   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2567                                    T_fciSMS_fCIBCCCAMELsequence1_sequence, hf_index, ett_camel_T_fciSMS_fCIBCCCAMELsequence1);
2568
2569   return offset;
2570 }
2571
2572
2573 static const value_string camel_CAMEL_FCISMSBillingChargingCharacteristics_vals[] = {
2574   {   0, "fCIBCCCAMELsequence1" },
2575   { 0, NULL }
2576 };
2577
2578 static const ber_choice_t CAMEL_FCISMSBillingChargingCharacteristics_choice[] = {
2579   {   0, &hf_camel_fciSMS_fCIBCCCAMELsequence1, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_T_fciSMS_fCIBCCCAMELsequence1 },
2580   { 0, NULL, 0, 0, 0, NULL }
2581 };
2582
2583 static int
2584 dissect_camel_CAMEL_FCISMSBillingChargingCharacteristics(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2585   offset = dissect_ber_choice(actx, tree, tvb, offset,
2586                                  CAMEL_FCISMSBillingChargingCharacteristics_choice, hf_index, ett_camel_CAMEL_FCISMSBillingChargingCharacteristics,
2587                                  NULL);
2588
2589   return offset;
2590 }
2591
2592
2593 static const ber_sequence_t CAMEL_SCIBillingChargingCharacteristicsAlt_sequence[] = {
2594   { NULL, 0, 0, 0, NULL }
2595 };
2596
2597 static int
2598 dissect_camel_CAMEL_SCIBillingChargingCharacteristicsAlt(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2599   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2600                                    CAMEL_SCIBillingChargingCharacteristicsAlt_sequence, hf_index, ett_camel_CAMEL_SCIBillingChargingCharacteristicsAlt);
2601
2602   return offset;
2603 }
2604
2605
2606 static const value_string camel_CAMEL_SCIBillingChargingCharacteristics_vals[] = {
2607   {   0, "aOCBeforeAnswer" },
2608   {   1, "aOCAfterAnswer" },
2609   {   2, "aOC-extension" },
2610   { 0, NULL }
2611 };
2612
2613 static const ber_choice_t CAMEL_SCIBillingChargingCharacteristics_choice[] = {
2614   {   0, &hf_camel_aOCBeforeAnswer, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_AOCBeforeAnswer },
2615   {   1, &hf_camel_aOCAfterAnswer, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_AOCSubsequent },
2616   {   2, &hf_camel_aOC_extension , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_camel_CAMEL_SCIBillingChargingCharacteristicsAlt },
2617   { 0, NULL, 0, 0, 0, NULL }
2618 };
2619
2620 static int
2621 dissect_camel_CAMEL_SCIBillingChargingCharacteristics(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2622   offset = dissect_ber_choice(actx, tree, tvb, offset,
2623                                  CAMEL_SCIBillingChargingCharacteristics_choice, hf_index, ett_camel_CAMEL_SCIBillingChargingCharacteristics,
2624                                  NULL);
2625
2626   return offset;
2627 }
2628
2629
2630 static const ber_sequence_t CAMEL_SCIGPRSBillingChargingCharacteristics_sequence[] = {
2631   { &hf_camel_aOCGPRS       , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_AOCGPRS },
2632   { &hf_camel_pDPID         , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_PDPID },
2633   { NULL, 0, 0, 0, NULL }
2634 };
2635
2636 static int
2637 dissect_camel_CAMEL_SCIGPRSBillingChargingCharacteristics(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2638   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2639                                    CAMEL_SCIGPRSBillingChargingCharacteristics_sequence, hf_index, ett_camel_CAMEL_SCIGPRSBillingChargingCharacteristics);
2640
2641   return offset;
2642 }
2643
2644
2645
2646 static int
2647 dissect_camel_Carrier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2648   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
2649                                        NULL);
2650
2651   return offset;
2652 }
2653
2654
2655 static const value_string camel_CGEncountered_vals[] = {
2656   {   0, "noCGencountered" },
2657   {   1, "manualCGencountered" },
2658   {   2, "scpOverload" },
2659   { 0, NULL }
2660 };
2661
2662
2663 static int
2664 dissect_camel_CGEncountered(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2665   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2666                                   NULL);
2667
2668   return offset;
2669 }
2670
2671
2672
2673 static int
2674 dissect_camel_ChargeIndicator(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2675   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
2676                                        NULL);
2677
2678   return offset;
2679 }
2680
2681
2682
2683 static int
2684 dissect_camel_LocationNumber(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2685   tvbuff_t *parameter_tvb;
2686   proto_tree *subtree;
2687
2688   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
2689                                        &parameter_tvb);
2690
2691
2692  if (!parameter_tvb)
2693         return offset;
2694
2695 subtree = proto_item_add_subtree(actx->created_item, ett_camel_locationnumber);
2696 dissect_isup_location_number_parameter(parameter_tvb, subtree, NULL);
2697
2698   return offset;
2699 }
2700
2701
2702
2703 static int
2704 dissect_camel_ChargeNumber(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2705   offset = dissect_camel_LocationNumber(implicit_tag, tvb, offset, actx, tree, hf_index);
2706
2707   return offset;
2708 }
2709
2710
2711
2712 static int
2713 dissect_camel_INTEGER_1_4294967295(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2714   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2715                                                 NULL);
2716
2717   return offset;
2718 }
2719
2720
2721 static const value_string camel_ChargingCharacteristics_vals[] = {
2722   {   0, "maxTransferredVolume" },
2723   {   1, "maxElapsedTime" },
2724   { 0, NULL }
2725 };
2726
2727 static const ber_choice_t ChargingCharacteristics_choice[] = {
2728   {   0, &hf_camel_maxTransferredVolume, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_4294967295 },
2729   {   1, &hf_camel_maxElapsedTime, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_86400 },
2730   { 0, NULL, 0, 0, 0, NULL }
2731 };
2732
2733 static int
2734 dissect_camel_ChargingCharacteristics(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2735   offset = dissect_ber_choice(actx, tree, tvb, offset,
2736                                  ChargingCharacteristics_choice, hf_index, ett_camel_ChargingCharacteristics,
2737                                  NULL);
2738
2739   return offset;
2740 }
2741
2742
2743
2744 static int
2745 dissect_camel_INTEGER_0_4294967295(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2746   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2747                                                 NULL);
2748
2749   return offset;
2750 }
2751
2752
2753 static const ber_sequence_t T_volumeIfTariffSwitch_sequence[] = {
2754   { &hf_camel_volumeSinceLastTariffSwitch, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_4294967295 },
2755   { &hf_camel_volumeTariffSwitchInterval, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_4294967295 },
2756   { NULL, 0, 0, 0, NULL }
2757 };
2758
2759 static int
2760 dissect_camel_T_volumeIfTariffSwitch(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2761   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2762                                    T_volumeIfTariffSwitch_sequence, hf_index, ett_camel_T_volumeIfTariffSwitch);
2763
2764   return offset;
2765 }
2766
2767
2768 static const value_string camel_TransferredVolume_vals[] = {
2769   {   0, "volumeIfNoTariffSwitch" },
2770   {   1, "volumeIfTariffSwitch" },
2771   { 0, NULL }
2772 };
2773
2774 static const ber_choice_t TransferredVolume_choice[] = {
2775   {   0, &hf_camel_volumeIfNoTariffSwitch, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_4294967295 },
2776   {   1, &hf_camel_volumeIfTariffSwitch, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_T_volumeIfTariffSwitch },
2777   { 0, NULL, 0, 0, 0, NULL }
2778 };
2779
2780 static int
2781 dissect_camel_TransferredVolume(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2782   offset = dissect_ber_choice(actx, tree, tvb, offset,
2783                                  TransferredVolume_choice, hf_index, ett_camel_TransferredVolume,
2784                                  NULL);
2785
2786   return offset;
2787 }
2788
2789
2790
2791 static int
2792 dissect_camel_INTEGER_0_86400(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2793   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2794                                                 NULL);
2795
2796   return offset;
2797 }
2798
2799
2800 static const ber_sequence_t T_timeGPRSIfTariffSwitch_sequence[] = {
2801   { &hf_camel_timeGPRSSinceLastTariffSwitch, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_86400 },
2802   { &hf_camel_timeGPRSTariffSwitchInterval, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_86400 },
2803   { NULL, 0, 0, 0, NULL }
2804 };
2805
2806 static int
2807 dissect_camel_T_timeGPRSIfTariffSwitch(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2808   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2809                                    T_timeGPRSIfTariffSwitch_sequence, hf_index, ett_camel_T_timeGPRSIfTariffSwitch);
2810
2811   return offset;
2812 }
2813
2814
2815 static const value_string camel_ElapsedTime_vals[] = {
2816   {   0, "timeGPRSIfNoTariffSwitch" },
2817   {   1, "timeGPRSIfTariffSwitch" },
2818   { 0, NULL }
2819 };
2820
2821 static const ber_choice_t ElapsedTime_choice[] = {
2822   {   0, &hf_camel_timeGPRSIfNoTariffSwitch, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_86400 },
2823   {   1, &hf_camel_timeGPRSIfTariffSwitch, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_T_timeGPRSIfTariffSwitch },
2824   { 0, NULL, 0, 0, 0, NULL }
2825 };
2826
2827 static int
2828 dissect_camel_ElapsedTime(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2829   offset = dissect_ber_choice(actx, tree, tvb, offset,
2830                                  ElapsedTime_choice, hf_index, ett_camel_ElapsedTime,
2831                                  NULL);
2832
2833   return offset;
2834 }
2835
2836
2837 static const value_string camel_ChargingResult_vals[] = {
2838   {   0, "transferredVolume" },
2839   {   1, "elapsedTime" },
2840   { 0, NULL }
2841 };
2842
2843 static const ber_choice_t ChargingResult_choice[] = {
2844   {   0, &hf_camel_transferredVolume, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_TransferredVolume },
2845   {   1, &hf_camel_elapsedTime   , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_ElapsedTime },
2846   { 0, NULL, 0, 0, 0, NULL }
2847 };
2848
2849 static int
2850 dissect_camel_ChargingResult(gboolean 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_choice(actx, tree, tvb, offset,
2852                                  ChargingResult_choice, hf_index, ett_camel_ChargingResult,
2853                                  NULL);
2854
2855   return offset;
2856 }
2857
2858
2859
2860 static int
2861 dissect_camel_INTEGER_0_255(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2862   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2863                                                 NULL);
2864
2865   return offset;
2866 }
2867
2868
2869 static const ber_sequence_t T_rO_VolumeIfTariffSwitch_sequence[] = {
2870   { &hf_camel_rO_VolumeSinceLastTariffSwitch, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_255 },
2871   { &hf_camel_rO_VolumeTariffSwitchInterval, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_255 },
2872   { NULL, 0, 0, 0, NULL }
2873 };
2874
2875 static int
2876 dissect_camel_T_rO_VolumeIfTariffSwitch(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2877   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2878                                    T_rO_VolumeIfTariffSwitch_sequence, hf_index, ett_camel_T_rO_VolumeIfTariffSwitch);
2879
2880   return offset;
2881 }
2882
2883
2884 static const value_string camel_TransferredVolumeRollOver_vals[] = {
2885   {   0, "rO-VolumeIfNoTariffSwitch" },
2886   {   1, "rO-VolumeIfTariffSwitch" },
2887   { 0, NULL }
2888 };
2889
2890 static const ber_choice_t TransferredVolumeRollOver_choice[] = {
2891   {   0, &hf_camel_rO_VolumeIfNoTariffSwitch, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_255 },
2892   {   1, &hf_camel_rO_VolumeIfTariffSwitch, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_T_rO_VolumeIfTariffSwitch },
2893   { 0, NULL, 0, 0, 0, NULL }
2894 };
2895
2896 static int
2897 dissect_camel_TransferredVolumeRollOver(gboolean 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_choice(actx, tree, tvb, offset,
2899                                  TransferredVolumeRollOver_choice, hf_index, ett_camel_TransferredVolumeRollOver,
2900                                  NULL);
2901
2902   return offset;
2903 }
2904
2905
2906 static const ber_sequence_t T_rO_TimeGPRSIfTariffSwitch_sequence[] = {
2907   { &hf_camel_rO_TimeGPRSSinceLastTariffSwitch, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_255 },
2908   { &hf_camel_rO_TimeGPRSTariffSwitchInterval, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_255 },
2909   { NULL, 0, 0, 0, NULL }
2910 };
2911
2912 static int
2913 dissect_camel_T_rO_TimeGPRSIfTariffSwitch(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2914   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2915                                    T_rO_TimeGPRSIfTariffSwitch_sequence, hf_index, ett_camel_T_rO_TimeGPRSIfTariffSwitch);
2916
2917   return offset;
2918 }
2919
2920
2921 static const value_string camel_ElapsedTimeRollOver_vals[] = {
2922   {   0, "rO-TimeGPRSIfNoTariffSwitch" },
2923   {   1, "rO-TimeGPRSIfTariffSwitch" },
2924   { 0, NULL }
2925 };
2926
2927 static const ber_choice_t ElapsedTimeRollOver_choice[] = {
2928   {   0, &hf_camel_rO_TimeGPRSIfNoTariffSwitch, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_255 },
2929   {   1, &hf_camel_rO_TimeGPRSIfTariffSwitch, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_T_rO_TimeGPRSIfTariffSwitch },
2930   { 0, NULL, 0, 0, 0, NULL }
2931 };
2932
2933 static int
2934 dissect_camel_ElapsedTimeRollOver(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2935   offset = dissect_ber_choice(actx, tree, tvb, offset,
2936                                  ElapsedTimeRollOver_choice, hf_index, ett_camel_ElapsedTimeRollOver,
2937                                  NULL);
2938
2939   return offset;
2940 }
2941
2942
2943 static const value_string camel_ChargingRollOver_vals[] = {
2944   {   0, "transferredVolumeRollOver" },
2945   {   1, "elapsedTimeRollOver" },
2946   { 0, NULL }
2947 };
2948
2949 static const ber_choice_t ChargingRollOver_choice[] = {
2950   {   0, &hf_camel_transferredVolumeRollOver, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_TransferredVolumeRollOver },
2951   {   1, &hf_camel_elapsedTimeRollOver, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_ElapsedTimeRollOver },
2952   { 0, NULL, 0, 0, 0, NULL }
2953 };
2954
2955 static int
2956 dissect_camel_ChargingRollOver(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2957   offset = dissect_ber_choice(actx, tree, tvb, offset,
2958                                  ChargingRollOver_choice, hf_index, ett_camel_ChargingRollOver,
2959                                  NULL);
2960
2961   return offset;
2962 }
2963
2964
2965 static const value_string camel_ErrorTreatment_vals[] = {
2966   {   0, "stdErrorAndInfo" },
2967   {   1, "help" },
2968   {   2, "repeatPrompt" },
2969   { 0, NULL }
2970 };
2971
2972
2973 static int
2974 dissect_camel_ErrorTreatment(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2975   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2976                                   NULL);
2977
2978   return offset;
2979 }
2980
2981
2982 static const ber_sequence_t CollectedDigits_sequence[] = {
2983   { &hf_camel_minimumNbOfDigits, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_30 },
2984   { &hf_camel_maximumNbOfDigits, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_30 },
2985   { &hf_camel_endOfReplyDigit, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_OCTET_STRING_SIZE_1_2 },
2986   { &hf_camel_cancelDigit   , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_OCTET_STRING_SIZE_1_2 },
2987   { &hf_camel_startDigit    , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_OCTET_STRING_SIZE_1_2 },
2988   { &hf_camel_firstDigitTimeOut, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_127 },
2989   { &hf_camel_interDigitTimeOut, BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_127 },
2990   { &hf_camel_errorTreatment, BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_ErrorTreatment },
2991   { &hf_camel_interruptableAnnInd, BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_BOOLEAN },
2992   { &hf_camel_voiceInformation, BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_BOOLEAN },
2993   { &hf_camel_voiceBack     , BER_CLASS_CON, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_BOOLEAN },
2994   { NULL, 0, 0, 0, NULL }
2995 };
2996
2997 static int
2998 dissect_camel_CollectedDigits(gboolean 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_sequence(implicit_tag, actx, tree, tvb, offset,
3000                                    CollectedDigits_sequence, hf_index, ett_camel_CollectedDigits);
3001
3002   return offset;
3003 }
3004
3005
3006 static const value_string camel_CollectedInfo_vals[] = {
3007   {   0, "collectedDigits" },
3008   { 0, NULL }
3009 };
3010
3011 static const ber_choice_t CollectedInfo_choice[] = {
3012   {   0, &hf_camel_collectedDigits, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_CollectedDigits },
3013   { 0, NULL, 0, 0, 0, NULL }
3014 };
3015
3016 static int
3017 dissect_camel_CollectedInfo(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3018   offset = dissect_ber_choice(actx, tree, tvb, offset,
3019                                  CollectedInfo_choice, hf_index, ett_camel_CollectedInfo,
3020                                  NULL);
3021
3022   return offset;
3023 }
3024
3025
3026 static const value_string camel_ConnectedNumberTreatmentInd_vals[] = {
3027   {   0, "noINImpact" },
3028   {   1, "presentationRestricted" },
3029   {   2, "presentCalledINNumber" },
3030   {   3, "presentCallINNumberRestricted" },
3031   { 0, NULL }
3032 };
3033
3034
3035 static int
3036 dissect_camel_ConnectedNumberTreatmentInd(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3037   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
3038                                   NULL);
3039
3040   return offset;
3041 }
3042
3043
3044 static const value_string camel_ControlType_vals[] = {
3045   {   0, "sCPOverloaded" },
3046   {   1, "manuallyInitiated" },
3047   { 0, NULL }
3048 };
3049
3050
3051 static int
3052 dissect_camel_ControlType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3053   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
3054                                   NULL);
3055
3056   return offset;
3057 }
3058
3059
3060
3061 static int
3062 dissect_camel_ScfID(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3063   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
3064                                        NULL);
3065
3066   return offset;
3067 }
3068
3069
3070 static const ber_sequence_t CompoundCriteria_sequence[] = {
3071   { &hf_camel_basicGapCriteria, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_BasicGapCriteria },
3072   { &hf_camel_scfID         , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_ScfID },
3073   { NULL, 0, 0, 0, NULL }
3074 };
3075
3076 static int
3077 dissect_camel_CompoundCriteria(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3078   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3079                                    CompoundCriteria_sequence, hf_index, ett_camel_CompoundCriteria);
3080
3081   return offset;
3082 }
3083
3084
3085
3086 static int
3087 dissect_camel_CorrelationID(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3088   offset = dissect_camel_Digits(implicit_tag, tvb, offset, actx, tree, hf_index);
3089
3090   return offset;
3091 }
3092
3093
3094
3095 static int
3096 dissect_camel_DateAndTime(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3097
3098
3099 /*
3100 * date_option = 1 european dd:mm:yyyy
3101 * date_option = 2 american mm:dd:yyyy
3102 */
3103
3104 /*
3105 * Output should be HH:MM:SS;dd/mm/yyyy
3106 * if european is selected, and HH:MM:SS;mm/dd/yyyy
3107 * otherwise.
3108 */
3109
3110   guint8 digit_pair;
3111   guint8 i = 0, curr_offset;
3112   char camel_time[CAMEL_DATE_AND_TIME_LEN];
3113   char c[CAMEL_DATE_AND_TIME_LEN]; /*temporary container*/
3114
3115   /* 2 digits per octet, 7 octets total + 5 delimiters */
3116
3117   for (curr_offset = 0; curr_offset < 7 ; curr_offset++)
3118   /*Loop to extract date*/
3119   {
3120       digit_pair = tvb_get_guint8(tvb, curr_offset);
3121
3122       proto_tree_add_uint(tree,
3123                           hf_digit,
3124                           tvb,
3125                           curr_offset,
3126                           1,
3127                           digit_pair & 0x0F);
3128
3129       proto_tree_add_uint(tree,
3130                           hf_digit,
3131                           tvb,
3132                           curr_offset,
3133                           1,
3134                           digit_pair >>4);
3135
3136
3137       c[i] = camel_number_to_char( digit_pair & 0x0F);
3138       i++;
3139       c[i] = camel_number_to_char( digit_pair >>4);
3140       i++;
3141   }
3142
3143   /* Pretty print date */
3144   /* XXX - Should we use sprintf here instead of assembling the string by
3145    * hand? */
3146
3147   camel_time[0] = c[8];
3148   camel_time[1] = c[9];
3149   camel_time[2] = ':';
3150   camel_time[3] = c[10];
3151   camel_time[4] = c[11];
3152   camel_time[5] = ':';
3153   camel_time[6] = c[12];
3154   camel_time[7] = c[13];
3155   camel_time[8] = ';';
3156   if ( EUROPEAN_DATE == date_format) /*european*/
3157   {
3158     camel_time[9] = c[6]; /*day*/
3159     camel_time[10] = c[7];
3160     camel_time[11] = '/';
3161     camel_time[12] = c[4]; /*month*/
3162     camel_time[13] = c[5];
3163   }
3164   else /*american*/
3165   {
3166     camel_time[9] = c[4]; /*month*/
3167     camel_time[10] = c[5];
3168     camel_time[11] = '/';
3169     camel_time[12] = c[6]; /*day*/
3170     camel_time[13] = c[7];
3171   }
3172   camel_time[14] = '/';
3173   camel_time[15] = c[0];
3174   camel_time[16] = c[1];
3175   camel_time[17] = c[2];
3176   camel_time[18] = c[3];
3177
3178   camel_time[CAMEL_DATE_AND_TIME_LEN - 1] = '\0';
3179
3180 /*start = 0, length = 7*/
3181
3182   proto_tree_add_string(tree,
3183                       hf_index,
3184                       tvb,
3185                       0,
3186                       7,
3187                       camel_time);
3188
3189   return 7; /* 7  octets eaten*/
3190
3191   return offset;
3192 }
3193
3194
3195 static const ber_sequence_t DestinationRoutingAddress_sequence_of[1] = {
3196   { &hf_camel_DestinationRoutingAddress_item, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_camel_CalledPartyNumber },
3197 };
3198
3199 static int
3200 dissect_camel_DestinationRoutingAddress(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3201   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3202                                       DestinationRoutingAddress_sequence_of, hf_index, ett_camel_DestinationRoutingAddress);
3203
3204   return offset;
3205 }
3206
3207
3208 static const value_string camel_InitiatorOfServiceChange_vals[] = {
3209   {   0, "a-side" },
3210   {   1, "b-side" },
3211   { 0, NULL }
3212 };
3213
3214
3215 static int
3216 dissect_camel_InitiatorOfServiceChange(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3217   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
3218                                   NULL);
3219
3220   return offset;
3221 }
3222
3223
3224 static const value_string camel_NatureOfServiceChange_vals[] = {
3225   {   0, "userInitiated" },
3226   {   1, "networkInitiated" },
3227   { 0, NULL }
3228 };
3229
3230
3231 static int
3232 dissect_camel_NatureOfServiceChange(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3233   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
3234                                   NULL);
3235
3236   return offset;
3237 }
3238
3239
3240 static const ber_sequence_t T_oServiceChangeSpecificInfo_sequence[] = {
3241   { &hf_camel_ext_basicServiceCode, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_Ext_BasicServiceCode },
3242   { &hf_camel_initiatorOfServiceChange, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_InitiatorOfServiceChange },
3243   { &hf_camel_natureOfServiceChange, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NatureOfServiceChange },
3244   { NULL, 0, 0, 0, NULL }
3245 };
3246
3247 static int
3248 dissect_camel_T_oServiceChangeSpecificInfo(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3249   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3250                                    T_oServiceChangeSpecificInfo_sequence, hf_index, ett_camel_T_oServiceChangeSpecificInfo);
3251
3252   return offset;
3253 }
3254
3255
3256 static const ber_sequence_t T_tServiceChangeSpecificInfo_sequence[] = {
3257   { &hf_camel_ext_basicServiceCode, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_Ext_BasicServiceCode },
3258   { &hf_camel_initiatorOfServiceChange, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_InitiatorOfServiceChange },
3259   { &hf_camel_natureOfServiceChange, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NatureOfServiceChange },
3260   { NULL, 0, 0, 0, NULL }
3261 };
3262
3263 static int
3264 dissect_camel_T_tServiceChangeSpecificInfo(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3265   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3266                                    T_tServiceChangeSpecificInfo_sequence, hf_index, ett_camel_T_tServiceChangeSpecificInfo);
3267
3268   return offset;
3269 }
3270
3271
3272 static const ber_sequence_t T_collectedInfoSpecificInfo_sequence[] = {
3273   { &hf_camel_calledPartyNumber, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_CalledPartyNumber },
3274   { NULL, 0, 0, 0, NULL }
3275 };
3276
3277 static int
3278 dissect_camel_T_collectedInfoSpecificInfo(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3279   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3280                                    T_collectedInfoSpecificInfo_sequence, hf_index, ett_camel_T_collectedInfoSpecificInfo);
3281
3282   return offset;
3283 }
3284
3285
3286 static const ber_sequence_t DpSpecificInfoAlt_sequence[] = {
3287   { &hf_camel_oServiceChangeSpecificInfo, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_T_oServiceChangeSpecificInfo },
3288   { &hf_camel_tServiceChangeSpecificInfo, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_T_tServiceChangeSpecificInfo },
3289   { &hf_camel_collectedInfoSpecificInfo, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_camel_T_collectedInfoSpecificInfo },
3290   { NULL, 0, 0, 0, NULL }
3291 };
3292
3293 static int
3294 dissect_camel_DpSpecificInfoAlt(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3295   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3296                                    DpSpecificInfoAlt_sequence, hf_index, ett_camel_DpSpecificInfoAlt);
3297
3298   return offset;
3299 }
3300
3301
3302
3303 static int
3304 dissect_camel_T_pDPTypeOrganization(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3305
3306  tvbuff_t       *parameter_tvb;
3307
3308   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
3309                                        &parameter_tvb);
3310
3311
3312  if (!parameter_tvb)
3313         return offset;
3314  PDPTypeOrganization  = (tvb_get_guint8(parameter_tvb,0) &0x0f);
3315
3316   return offset;
3317 }
3318
3319
3320
3321 static int
3322 dissect_camel_T_pDPTypeNumber(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3323
3324  tvbuff_t       *parameter_tvb;
3325  proto_tree *subtree;
3326