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