Revert "TODO epan/dissectors/asn1/kerberos/packet-kerberos-template.c new GSS flags"
[wireshark-sm.git] / epan / dissectors / packet-isdn-sup.c
blob401c3635cc661f32a102d6b179f76c882f132ce7
1 /* Do not modify this file. Changes will be overwritten. */
2 /* Generated automatically by the ASN.1 to Wireshark dissector compiler */
3 /* packet-isdn-sup.c */
4 /* asn2wrs.py -b -q -L -p isdn-sup -c ./isdn-sup.cnf -s ./packet-isdn-sup-template -D . -O ../.. Addressing-Data-Elements.asn Basic-Service-Elements.asn Embedded-Q931-Types.asn General-Errors.asn Advice-of-Charge-Operations.asn Closed-User-Group-Service-Operations.asn Conference-Add-On-Operations.asn Diversion-Operations.asn MCID-Operations.asn User-To-User-Signalling-Operations.asn Freephone-Operations.asn MLPP-Operations-And-Errors.asn */
6 /* packet-isdn-sup-template.c
7 * Routines for ETSI Integrated Services Digital Network (ISDN)
8 * supplementary services
9 * Copyright 2013, Anders Broman <anders.broman@ericsson.com>
11 * Wireshark - Network traffic analyzer
12 * By Gerald Combs <gerald@wireshark.org>
13 * Copyright 1998 Gerald Combs
15 * SPDX-License-Identifier: GPL-2.0-or-later
16 * References: ETSI 300 374
19 #include "config.h"
21 #include <epan/packet.h>
22 #include <epan/expert.h>
23 #include <wsutil/array.h>
25 #include "packet-ber.h"
27 #define PNAME "ISDN supplementary services"
28 #define PSNAME "ISDN_SUP"
29 #define PFNAME "isdn_sup"
31 void proto_register_isdn_sup(void);
32 void proto_reg_handoff_isdn_sup(void);
34 static dissector_handle_t isdn_sup_arg_handle;
35 static dissector_handle_t isdn_sup_res_handle;
36 static dissector_handle_t isdn_sup_err_handle;
38 #define fPHOID "0.4.0.210.1"
40 /* Initialize the protocol and registered fields */
41 static int proto_isdn_sup;
42 static int hf_isdn_sup_operation;
43 static int hf_isdn_sup_error;
45 /* Global variables */
47 #if 0
48 /* ROSE context */
49 static rose_ctx_t isdn_sup_rose_ctx;
50 #endif
52 typedef struct _isdn_sup_op_t {
53 int32_t opcode;
54 dissector_t arg_pdu;
55 dissector_t res_pdu;
56 } isdn_sup_op_t;
58 typedef struct _isdn_global_sup_op_t {
59 const char* oid;
60 dissector_t arg_pdu;
61 dissector_t res_pdu;
62 } isdn_sup_global_op_t;
65 typedef struct isdn_sup_err_t {
66 int32_t errcode;
67 dissector_t err_pdu;
68 } isdn_sup_err_t;
70 static const value_string isdn_sup_str_operation[] = {
71 { 1, "userUserService" },
72 { 2, "cUGcall" },
73 { 3, "mCIDRequest" },
74 { 7, "activationDiversion" },
75 { 8, "deactivationDiversion" },
76 { 9, "activationStatusNotificationDiv" },
77 { 10, "deactivationStatusNotificationDiv" },
78 { 11, "interrogationDiversion" },
79 { 12, "diversionInformation" },
80 { 13, "callDeflection" },
81 { 14, "callRerouteing" },
82 { 15, "divertingLegInformation2" },
83 { 17, "interrogateServedUserNumbers" },
84 { 18, "divertingLegInformation1" },
85 { 19, "divertingLegInformation3" },
86 { 24, "mLPPLFBQuery" },
87 { 25, "mLPPCallRequest" },
88 { 26, "mLPPCallPreemption" },
89 { 30, "chargingRequest" },
90 { 31, "aOCSCurrency" },
91 { 32, "aOCSSpecialArr" },
92 { 33, "aOCDCurrency" },
93 { 34, "aOCDChargingUnit" },
94 { 35, "aOCECurrency" },
95 { 36, "aOCEChargingUnit" },
96 { 40, "beginCONF" },
97 { 41, "addCONF" },
98 { 42, "splitCONF" },
99 { 43, "dropCONF" },
100 { 44, "isolateCONF" },
101 { 45, "reattachCONF" },
102 { 46, "partyDISC" },
103 { 0, NULL}
107 static const value_string isdn_sup_str_error[] = {
108 { 0, "notSubscribed" },
109 { 3, "notAvailable" },
110 { 4, "notImplemented" },
111 { 6, "invalidServedUserNr" },
112 { 7, "invalidCallState" },
113 { 8, "basicServiceNotProvided" },
114 { 9, "notIncomingCall" },
115 { 10, "supplementaryServiceInteractionNotAllowed" },
116 { 11, "resourceUnavailable" },
117 { 26, "noChargingInfoAvailable" },
118 { 16, "invalidOrUnregisteredCUGIndex" },
119 { 17, "requestedBasicServiceViolatesCUGConstraints" },
120 { 18, "outgoingCallsBarredWithinCUG" },
121 { 19, "incomingCallsBarredWithinCUG" },
122 { 20, "userNotMemberOfCUG" },
123 { 21, "inconsistencyInDesignatedFacilityAndSubscriberClass" },
124 { 28, "illConferenceId" },
125 { 29, "illPartyId" },
126 { 30, "numberOfPartiesExceeded" },
127 { 31, "notActive" },
128 { 32, "notAllowed" },
129 { 12, "invalidDivertedToNr" },
130 { 14, "specialServiceNr" },
131 { 15, "diversionToServedUserNr" },
132 { 23, "incomingCallAccepted" },
133 { 24, "numberOfDiversionsExceeded" },
134 { 46, "notActivated" },
135 { 48, "requestAlreadyAccepted" },
136 { 1, "rejectedByTheNetwork" },
137 { 2, "rejectedByTheUser" },
138 { 44, "unauthorizedPrecedenceLevel" },
139 { 0, NULL}
142 static int hf_isdn_sup;
144 static int hf_isdn_sup_ChargingRequestArg_PDU; /* ChargingRequestArg */
145 static int hf_isdn_sup_ChargingRequestRes_PDU; /* ChargingRequestRes */
146 static int hf_isdn_sup_AOCSCurrencyArg_PDU; /* AOCSCurrencyArg */
147 static int hf_isdn_sup_AOCSSpecialArrArg_PDU; /* AOCSSpecialArrArg */
148 static int hf_isdn_sup_AOCDCurrencyArg_PDU; /* AOCDCurrencyArg */
149 static int hf_isdn_sup_AOCDChargingUnitArg_PDU; /* AOCDChargingUnitArg */
150 static int hf_isdn_sup_AOCECurrencyArg_PDU; /* AOCECurrencyArg */
151 static int hf_isdn_sup_AOCEChargingUnitArg_PDU; /* AOCEChargingUnitArg */
152 static int hf_isdn_sup_CUGcallArg_PDU; /* CUGcallArg */
153 static int hf_isdn_sup_BeginCONFArg_PDU; /* BeginCONFArg */
154 static int hf_isdn_sup_BeginCONFRes_PDU; /* BeginCONFRes */
155 static int hf_isdn_sup_AddCONFArg_PDU; /* AddCONFArg */
156 static int hf_isdn_sup_AddCONFRes_PDU; /* AddCONFRes */
157 static int hf_isdn_sup_SplitCONFArg_PDU; /* SplitCONFArg */
158 static int hf_isdn_sup_DropCONFArg_PDU; /* DropCONFArg */
159 static int hf_isdn_sup_IsolateCONFArg_PDU; /* IsolateCONFArg */
160 static int hf_isdn_sup_ReattachCONFArg_PDU; /* ReattachCONFArg */
161 static int hf_isdn_sup_PartyDISCArg_PDU; /* PartyDISCArg */
162 static int hf_isdn_sup_ActivationDiversionArg_PDU; /* ActivationDiversionArg */
163 static int hf_isdn_sup_DeactivationDiversionArg_PDU; /* DeactivationDiversionArg */
164 static int hf_isdn_sup_ActivationStatusNotificationDivArg_PDU; /* ActivationStatusNotificationDivArg */
165 static int hf_isdn_sup_DeactivationStatusNotificationDivArg_PDU; /* DeactivationStatusNotificationDivArg */
166 static int hf_isdn_sup_InterrogationDiversionArg_PDU; /* InterrogationDiversionArg */
167 static int hf_isdn_sup_InterrogationDiversionRes_PDU; /* InterrogationDiversionRes */
168 static int hf_isdn_sup_InterrogateServedUserNumbersRes_PDU; /* InterrogateServedUserNumbersRes */
169 static int hf_isdn_sup_DiversionInformationArg_PDU; /* DiversionInformationArg */
170 static int hf_isdn_sup_CallDeflectionArg_PDU; /* CallDeflectionArg */
171 static int hf_isdn_sup_CallRerouteingArg_PDU; /* CallRerouteingArg */
172 static int hf_isdn_sup_DivertingLegInformation1Arg_PDU; /* DivertingLegInformation1Arg */
173 static int hf_isdn_sup_DivertingLegInformation2Arg_PDU; /* DivertingLegInformation2Arg */
174 static int hf_isdn_sup_DivertingLegInformation3Arg_PDU; /* DivertingLegInformation3Arg */
175 static int hf_isdn_sup_UserUserServiceArg_PDU; /* UserUserServiceArg */
176 static int hf_isdn_sup_CalledFreephoneNrArg_PDU; /* CalledFreephoneNrArg */
177 static int hf_isdn_sup_Monitor_T_FPHArg_PDU; /* Monitor_T_FPHArg */
178 static int hf_isdn_sup_Free_T_FPHArg_PDU; /* Free_T_FPHArg */
179 static int hf_isdn_sup_Call_T_FPHArg_PDU; /* Call_T_FPHArg */
180 static int hf_isdn_sup_MLPPLFBArg_PDU; /* MLPPLFBArg */
181 static int hf_isdn_sup_MLPPLFBResp_PDU; /* MLPPLFBResp */
182 static int hf_isdn_sup_MLPPParams_PDU; /* MLPPParams */
183 static int hf_isdn_sup_StatusRequest_PDU; /* StatusRequest */
184 static int hf_isdn_sup_PreemptParams_PDU; /* PreemptParams */
185 static int hf_isdn_sup_presentationallowedaddressscreened; /* AddressScreened */
186 static int hf_isdn_sup_presentationRestricted; /* NULL */
187 static int hf_isdn_sup_numberNotAvailableDueToInterworking; /* NULL */
188 static int hf_isdn_sup_presentationrestrictedaddressscreened; /* AddressScreened */
189 static int hf_isdn_sup_presentationAllowedAddress; /* Address */
190 static int hf_isdn_sup_presentationRestrictedAddress; /* Address */
191 static int hf_isdn_sup_presentationallowednumberscreened; /* NumberScreened */
192 static int hf_isdn_sup_presentationrestrictednumberscreened; /* NumberScreened */
193 static int hf_isdn_sup_presentationAllowedNumber; /* PartyNumber */
194 static int hf_isdn_sup_presentationRestrictedNumber; /* PartyNumber */
195 static int hf_isdn_sup_partyNumber; /* PartyNumber */
196 static int hf_isdn_sup_screeningIndicator; /* ScreeningIndicator */
197 static int hf_isdn_sup_partySubaddress; /* PartySubaddress */
198 static int hf_isdn_sup_unknownPartyNumber; /* NumberDigits */
199 static int hf_isdn_sup_publicPartyNumber; /* PublicPartyNumber */
200 static int hf_isdn_sup_nsapEncodedNumber; /* NsapEncodedNumber */
201 static int hf_isdn_sup_dataPartyNumber; /* NumberDigits */
202 static int hf_isdn_sup_telexPartyNumber; /* NumberDigits */
203 static int hf_isdn_sup_privatePartyNumber; /* PrivatePartyNumber */
204 static int hf_isdn_sup_nationalStandardPartyNumber; /* NumberDigits */
205 static int hf_isdn_sup_publicTypeOfNumber; /* PublicTypeOfNumber */
206 static int hf_isdn_sup_publicNumberDigits; /* NumberDigits */
207 static int hf_isdn_sup_privateTypeOfNumber; /* PrivateTypeOfNumber */
208 static int hf_isdn_sup_privateNumberDigits; /* NumberDigits */
209 static int hf_isdn_sup_userSpecifiedSubaddress; /* UserSpecifiedSubaddress */
210 static int hf_isdn_sup_nSAPSubaddress; /* NSAPSubaddress */
211 static int hf_isdn_sup_subaddressInformation; /* SubaddressInformation */
212 static int hf_isdn_sup_oddCountIndicator; /* BOOLEAN */
213 static int hf_isdn_sup_aOCSCurrencyInfoList; /* AOCSCurrencyInfoList */
214 static int hf_isdn_sup_aOCSSpecialArrInfo; /* AOCSSpecialArrInfo */
215 static int hf_isdn_sup_chargingInfoFollows; /* NULL */
216 static int hf_isdn_sup_chargeNotAvailable; /* NULL */
217 static int hf_isdn_sup_aOCDCurrencyInfo; /* AOCDCurrencyInfo */
218 static int hf_isdn_sup_aOCDChargingUnitInfo; /* AOCDChargingUnitInfo */
219 static int hf_isdn_sup_aOCECurrencyInfo; /* AOCECurrencyInfo */
220 static int hf_isdn_sup_aOCEChargingUnitInfo; /* AOCEChargingUnitInfo */
221 static int hf_isdn_sup_AOCSCurrencyInfoList_item; /* AOCSCurrencyInfo */
222 static int hf_isdn_sup_chargedItem; /* ChargedItem */
223 static int hf_isdn_sup_chargingtype; /* T_chargingtype */
224 static int hf_isdn_sup_aocschargingtypespecificCurrency; /* AOCSChargingTypeSpecificCurrency */
225 static int hf_isdn_sup_durationCurrency; /* DurationCurrency */
226 static int hf_isdn_sup_flatRateCurrency; /* FlatRateCurrency */
227 static int hf_isdn_sup_volumeRateCurrency; /* VolumeRateCurrency */
228 static int hf_isdn_sup_specialChargingCode; /* SpecialChargingCode */
229 static int hf_isdn_sup_freeOfCharge; /* NULL */
230 static int hf_isdn_sup_currencyInfoNotAvailable; /* NULL */
231 static int hf_isdn_sup_dCurrency; /* Currency */
232 static int hf_isdn_sup_dAmount; /* Amount */
233 static int hf_isdn_sup_dChargingType; /* ChargingType */
234 static int hf_isdn_sup_dTime; /* Time */
235 static int hf_isdn_sup_dGranularity; /* Time */
236 static int hf_isdn_sup_fRCurrency; /* Currency */
237 static int hf_isdn_sup_fRAmount; /* Amount */
238 static int hf_isdn_sup_vRCurrency; /* Currency */
239 static int hf_isdn_sup_vRAmount; /* Amount */
240 static int hf_isdn_sup_vRVolumeUnit; /* VolumeUnit */
241 static int hf_isdn_sup_aocdspecificCurrency; /* AOCDSpecificCurrency */
242 static int hf_isdn_sup_recordedCurrency; /* RecordedCurrency */
243 static int hf_isdn_sup_typeOfChargingInfo; /* TypeOfChargingInfo */
244 static int hf_isdn_sup_aOCDBillingId; /* AOCDBillingId */
245 static int hf_isdn_sup_aocdspecificchargingunits; /* AOCDSpecificChargingUnits */
246 static int hf_isdn_sup_recordedUnitsList; /* RecordedUnitsList */
247 static int hf_isdn_sup_rCurrency; /* Currency */
248 static int hf_isdn_sup_rAmount; /* Amount */
249 static int hf_isdn_sup_RecordedUnitsList_item; /* RecordedUnits */
250 static int hf_isdn_sup_recoredunitscc; /* RecoredUnitsCc */
251 static int hf_isdn_sup_recordedNumberOfUnits; /* NumberOfUnits */
252 static int hf_isdn_sup_notAvailable; /* NULL */
253 static int hf_isdn_sup_recordedTypeOfUnits; /* TypeOfUnit */
254 static int hf_isdn_sup_aocecurrencycc; /* AOCECurrencyCc */
255 static int hf_isdn_sup_aoceccspecificCurrency; /* AOCECcSpecificCurrency */
256 static int hf_isdn_sup_aOCEBillingId; /* AOCEBillingId */
257 static int hf_isdn_sup_chargingAssociation; /* ChargingAssociation */
258 static int hf_isdn_sup_aocechargingunitcc; /* AOCEChargingUnitCc */
259 static int hf_isdn_sup_aoceccspecificchargingunits; /* AOCECcSpecificChargingUnits */
260 static int hf_isdn_sup_currencyAmount; /* CurrencyAmount */
261 static int hf_isdn_sup_multiplier; /* Multiplier */
262 static int hf_isdn_sup_lengthOfTimeUnit; /* LengthOfTimeUnit */
263 static int hf_isdn_sup_scale; /* Scale */
264 static int hf_isdn_sup_chargeNumber; /* PartyNumber */
265 static int hf_isdn_sup_chargeIdentifier; /* ChargeIdentifier */
266 static int hf_isdn_sup_oARequested; /* OARequested */
267 static int hf_isdn_sup_cUGIndex; /* CUGIndex */
268 static int hf_isdn_sup_conferenceId; /* ConferenceId */
269 static int hf_isdn_sup_partyId; /* PartyId */
270 static int hf_isdn_sup_procedure; /* Procedure */
271 static int hf_isdn_sup_basicService; /* BasicService */
272 static int hf_isdn_sup_forwardedToAddress; /* Address */
273 static int hf_isdn_sup_servedUserNr; /* ServedUserNr */
274 static int hf_isdn_sup_noReplyTimer; /* NoReplyTimer */
275 static int hf_isdn_sup_forwardedToAddresss; /* Address */
276 static int hf_isdn_sup_diversionReason; /* DiversionReason */
277 static int hf_isdn_sup_servedUserSubaddress; /* PartySubaddress */
278 static int hf_isdn_sup_callingAddress; /* PresentedAddressScreened */
279 static int hf_isdn_sup_originalCalledNr; /* PresentedNumberUnscreened */
280 static int hf_isdn_sup_lastDivertingNr; /* PresentedNumberUnscreened */
281 static int hf_isdn_sup_lastDivertingReason; /* DiversionReason */
282 static int hf_isdn_sup_userInfo; /* Q931InformationElement */
283 static int hf_isdn_sup_deflectionAddress; /* Address */
284 static int hf_isdn_sup_presentationAllowedDivertedToUser; /* PresentationAllowedIndicator */
285 static int hf_isdn_sup_rerouteingReason; /* DiversionReason */
286 static int hf_isdn_sup_calledAddress; /* Address */
287 static int hf_isdn_sup_rerouteingCounter; /* DiversionCounter */
288 static int hf_isdn_sup_q931InfoElement; /* Q931InformationElement */
289 static int hf_isdn_sup_lastRerouteingNr; /* PresentedNumberUnscreened */
290 static int hf_isdn_sup_subscriptionOption; /* SubscriptionOption */
291 static int hf_isdn_sup_callingPartySubaddress; /* PartySubaddress */
292 static int hf_isdn_sup_divertedToNumber; /* PresentedNumberUnscreened */
293 static int hf_isdn_sup_diversionCounter; /* DiversionCounter */
294 static int hf_isdn_sup_divertingNr; /* PresentedNumberUnscreened */
295 static int hf_isdn_sup_IntResultList_item; /* IntResult */
296 static int hf_isdn_sup_individualNumber; /* PartyNumber */
297 static int hf_isdn_sup_allNumbers; /* NULL */
298 static int hf_isdn_sup_ServedUserNumberList_item; /* PartyNumber */
299 static int hf_isdn_sup_service; /* Service */
300 static int hf_isdn_sup_preferred; /* Preferred */
301 static int hf_isdn_sup_servedUserDestination; /* PartyNumber */
302 static int hf_isdn_sup_queueIdentity; /* QueueIdentity */
303 static int hf_isdn_sup_fPHReference; /* FPHReference */
304 static int hf_isdn_sup_calledFreephoneNr; /* CalledFreephoneNr */
305 static int hf_isdn_sup_mlppParams; /* MLPPParams */
306 static int hf_isdn_sup_ieArg; /* IEArg */
307 static int hf_isdn_sup_precLevel; /* PrecLevel */
308 static int hf_isdn_sup_lfbIndictn; /* LFBIndictn */
309 static int hf_isdn_sup_mlppSvcDomn; /* MLPPSvcDomn */
310 static int hf_isdn_sup_statusQuery; /* StatusQuery */
311 static int hf_isdn_sup_location; /* Location */
314 /* Initialize the subtree pointers */
315 static int ett_isdn_sup;
317 static int ett_isdn_sup_PresentedAddressScreened;
318 static int ett_isdn_sup_PresentedAddressUnscreened;
319 static int ett_isdn_sup_PresentedNumberScreened;
320 static int ett_isdn_sup_PresentedNumberUnscreened;
321 static int ett_isdn_sup_AddressScreened;
322 static int ett_isdn_sup_NumberScreened;
323 static int ett_isdn_sup_Address;
324 static int ett_isdn_sup_PartyNumber;
325 static int ett_isdn_sup_PublicPartyNumber;
326 static int ett_isdn_sup_PrivatePartyNumber;
327 static int ett_isdn_sup_PartySubaddress;
328 static int ett_isdn_sup_UserSpecifiedSubaddress;
329 static int ett_isdn_sup_ChargingRequestRes;
330 static int ett_isdn_sup_AOCSCurrencyArg;
331 static int ett_isdn_sup_AOCSSpecialArrArg;
332 static int ett_isdn_sup_AOCDCurrencyArg;
333 static int ett_isdn_sup_AOCDChargingUnitArg;
334 static int ett_isdn_sup_AOCECurrencyArg;
335 static int ett_isdn_sup_AOCEChargingUnitArg;
336 static int ett_isdn_sup_AOCSCurrencyInfoList;
337 static int ett_isdn_sup_AOCSCurrencyInfo;
338 static int ett_isdn_sup_T_chargingtype;
339 static int ett_isdn_sup_AOCSChargingTypeSpecificCurrency;
340 static int ett_isdn_sup_DurationCurrency;
341 static int ett_isdn_sup_FlatRateCurrency;
342 static int ett_isdn_sup_VolumeRateCurrency;
343 static int ett_isdn_sup_AOCDCurrencyInfo;
344 static int ett_isdn_sup_AOCDSpecificCurrency;
345 static int ett_isdn_sup_AOCDChargingUnitInfo;
346 static int ett_isdn_sup_AOCDSpecificChargingUnits;
347 static int ett_isdn_sup_RecordedCurrency;
348 static int ett_isdn_sup_RecordedUnitsList;
349 static int ett_isdn_sup_RecordedUnits;
350 static int ett_isdn_sup_RecoredUnitsCc;
351 static int ett_isdn_sup_AOCECurrencyInfo;
352 static int ett_isdn_sup_AOCECurrencyCc;
353 static int ett_isdn_sup_AOCECcSpecificCurrency;
354 static int ett_isdn_sup_AOCEChargingUnitInfo;
355 static int ett_isdn_sup_AOCEChargingUnitCc;
356 static int ett_isdn_sup_AOCECcSpecificChargingUnits;
357 static int ett_isdn_sup_Amount;
358 static int ett_isdn_sup_Time;
359 static int ett_isdn_sup_ChargingAssociation;
360 static int ett_isdn_sup_CUGcallArg;
361 static int ett_isdn_sup_BeginCONFRes;
362 static int ett_isdn_sup_SplitCONFArg;
363 static int ett_isdn_sup_ActivationDiversionArg;
364 static int ett_isdn_sup_DeactivationDiversionArg;
365 static int ett_isdn_sup_ActivationStatusNotificationDivArg;
366 static int ett_isdn_sup_DeactivationStatusNotificationDivArg;
367 static int ett_isdn_sup_InterrogationDiversionArg;
368 static int ett_isdn_sup_DiversionInformationArg;
369 static int ett_isdn_sup_CallDeflectionArg;
370 static int ett_isdn_sup_CallRerouteingArg;
371 static int ett_isdn_sup_DivertingLegInformation1Arg;
372 static int ett_isdn_sup_DivertingLegInformation2Arg;
373 static int ett_isdn_sup_IntResultList;
374 static int ett_isdn_sup_IntResult;
375 static int ett_isdn_sup_ServedUserNr;
376 static int ett_isdn_sup_ServedUserNumberList;
377 static int ett_isdn_sup_UserUserServiceArg;
378 static int ett_isdn_sup_Monitor_T_FPHArg;
379 static int ett_isdn_sup_Free_T_FPHArg;
380 static int ett_isdn_sup_Call_T_FPHArg;
381 static int ett_isdn_sup_MLPPLFBArg;
382 static int ett_isdn_sup_MLPPParams;
383 static int ett_isdn_sup_MLPPLFBResp;
385 /* static expert_field ei_isdn_sup_unsupported_arg_type; */
386 static expert_field ei_isdn_sup_unsupported_result_type;
387 static expert_field ei_isdn_sup_unsupported_error_type;
389 /* Preference settings default */
391 /* Global variables */
395 static int
396 dissect_isdn_sup_NumberDigits(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
397 offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_NumericString,
398 actx, tree, tvb, offset, hf_index,
399 NULL);
401 return offset;
405 static const value_string isdn_sup_PublicTypeOfNumber_vals[] = {
406 { 0, "unknown" },
407 { 1, "internationalNumber" },
408 { 2, "nationalNumber" },
409 { 3, "networkSpecificNumber" },
410 { 4, "subscriberNumber" },
411 { 6, "abbreviatedNumber" },
412 { 0, NULL }
416 static int
417 dissect_isdn_sup_PublicTypeOfNumber(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
418 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
419 NULL);
421 return offset;
425 static const ber_sequence_t PublicPartyNumber_sequence[] = {
426 { &hf_isdn_sup_publicTypeOfNumber, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_PublicTypeOfNumber },
427 { &hf_isdn_sup_publicNumberDigits, BER_CLASS_UNI, BER_UNI_TAG_NumericString, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_NumberDigits },
428 { NULL, 0, 0, 0, NULL }
431 static int
432 dissect_isdn_sup_PublicPartyNumber(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
433 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
434 PublicPartyNumber_sequence, hf_index, ett_isdn_sup_PublicPartyNumber);
436 return offset;
441 static int
442 dissect_isdn_sup_NsapEncodedNumber(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
443 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
444 NULL);
446 return offset;
450 static const value_string isdn_sup_PrivateTypeOfNumber_vals[] = {
451 { 0, "unknown" },
452 { 1, "level2RegionalNumber" },
453 { 2, "level1RegionalNumber" },
454 { 3, "pTNSpecificNumber" },
455 { 4, "localNumber" },
456 { 6, "abbreviatedNumber" },
457 { 0, NULL }
461 static int
462 dissect_isdn_sup_PrivateTypeOfNumber(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
463 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
464 NULL);
466 return offset;
470 static const ber_sequence_t PrivatePartyNumber_sequence[] = {
471 { &hf_isdn_sup_privateTypeOfNumber, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_PrivateTypeOfNumber },
472 { &hf_isdn_sup_privateNumberDigits, BER_CLASS_UNI, BER_UNI_TAG_NumericString, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_NumberDigits },
473 { NULL, 0, 0, 0, NULL }
476 static int
477 dissect_isdn_sup_PrivatePartyNumber(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
478 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
479 PrivatePartyNumber_sequence, hf_index, ett_isdn_sup_PrivatePartyNumber);
481 return offset;
485 static const value_string isdn_sup_PartyNumber_vals[] = {
486 { 0, "unknownPartyNumber" },
487 { 1, "publicPartyNumber" },
488 { 2, "nsapEncodedNumber" },
489 { 3, "dataPartyNumber" },
490 { 4, "telexPartyNumber" },
491 { 5, "privatePartyNumber" },
492 { 8, "nationalStandardPartyNumber" },
493 { 0, NULL }
496 static const ber_choice_t PartyNumber_choice[] = {
497 { 0, &hf_isdn_sup_unknownPartyNumber, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_isdn_sup_NumberDigits },
498 { 1, &hf_isdn_sup_publicPartyNumber, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_PublicPartyNumber },
499 { 2, &hf_isdn_sup_nsapEncodedNumber, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_isdn_sup_NsapEncodedNumber },
500 { 3, &hf_isdn_sup_dataPartyNumber, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_isdn_sup_NumberDigits },
501 { 4, &hf_isdn_sup_telexPartyNumber, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_isdn_sup_NumberDigits },
502 { 5, &hf_isdn_sup_privatePartyNumber, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_isdn_sup_PrivatePartyNumber },
503 { 8, &hf_isdn_sup_nationalStandardPartyNumber, BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_isdn_sup_NumberDigits },
504 { 0, NULL, 0, 0, 0, NULL }
507 static int
508 dissect_isdn_sup_PartyNumber(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
509 offset = dissect_ber_choice(actx, tree, tvb, offset,
510 PartyNumber_choice, hf_index, ett_isdn_sup_PartyNumber,
511 NULL);
513 return offset;
517 static const value_string isdn_sup_ScreeningIndicator_vals[] = {
518 { 0, "userProvidedNotScreened" },
519 { 1, "userProvidedVerifiedAndPassed" },
520 { 2, "userProvidedVerifiedAndFailed" },
521 { 3, "networkProvided" },
522 { 0, NULL }
526 static int
527 dissect_isdn_sup_ScreeningIndicator(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
528 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
529 NULL);
531 return offset;
536 static int
537 dissect_isdn_sup_SubaddressInformation(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
538 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
539 NULL);
541 return offset;
546 static int
547 dissect_isdn_sup_BOOLEAN(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
548 offset = dissect_ber_boolean(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
550 return offset;
554 static const ber_sequence_t UserSpecifiedSubaddress_sequence[] = {
555 { &hf_isdn_sup_subaddressInformation, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_SubaddressInformation },
556 { &hf_isdn_sup_oddCountIndicator, BER_CLASS_UNI, BER_UNI_TAG_BOOLEAN, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_isdn_sup_BOOLEAN },
557 { NULL, 0, 0, 0, NULL }
560 static int
561 dissect_isdn_sup_UserSpecifiedSubaddress(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
562 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
563 UserSpecifiedSubaddress_sequence, hf_index, ett_isdn_sup_UserSpecifiedSubaddress);
565 return offset;
570 static int
571 dissect_isdn_sup_NSAPSubaddress(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
572 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
573 NULL);
575 return offset;
579 static const value_string isdn_sup_PartySubaddress_vals[] = {
580 { 0, "userSpecifiedSubaddress" },
581 { 1, "nSAPSubaddress" },
582 { 0, NULL }
585 static const ber_choice_t PartySubaddress_choice[] = {
586 { 0, &hf_isdn_sup_userSpecifiedSubaddress, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_UserSpecifiedSubaddress },
587 { 1, &hf_isdn_sup_nSAPSubaddress, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_NSAPSubaddress },
588 { 0, NULL, 0, 0, 0, NULL }
591 static int
592 dissect_isdn_sup_PartySubaddress(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
593 offset = dissect_ber_choice(actx, tree, tvb, offset,
594 PartySubaddress_choice, hf_index, ett_isdn_sup_PartySubaddress,
595 NULL);
597 return offset;
601 static const ber_sequence_t AddressScreened_sequence[] = {
602 { &hf_isdn_sup_partyNumber, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_PartyNumber },
603 { &hf_isdn_sup_screeningIndicator, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_ScreeningIndicator },
604 { &hf_isdn_sup_partySubaddress, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_PartySubaddress },
605 { NULL, 0, 0, 0, NULL }
608 static int
609 dissect_isdn_sup_AddressScreened(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
610 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
611 AddressScreened_sequence, hf_index, ett_isdn_sup_AddressScreened);
613 return offset;
618 static int
619 dissect_isdn_sup_NULL(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
620 offset = dissect_ber_null(implicit_tag, actx, tree, tvb, offset, hf_index);
622 return offset;
626 static const value_string isdn_sup_PresentedAddressScreened_vals[] = {
627 { 0, "presentationAllowedAddress" },
628 { 1, "presentationRestricted" },
629 { 2, "numberNotAvailableDueToInterworking" },
630 { 3, "presentationRestrictedAddress" },
631 { 0, NULL }
634 static const ber_choice_t PresentedAddressScreened_choice[] = {
635 { 0, &hf_isdn_sup_presentationallowedaddressscreened, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_isdn_sup_AddressScreened },
636 { 1, &hf_isdn_sup_presentationRestricted, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_NULL },
637 { 2, &hf_isdn_sup_numberNotAvailableDueToInterworking, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_isdn_sup_NULL },
638 { 3, &hf_isdn_sup_presentationrestrictedaddressscreened, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_isdn_sup_AddressScreened },
639 { 0, NULL, 0, 0, 0, NULL }
642 static int
643 dissect_isdn_sup_PresentedAddressScreened(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
644 offset = dissect_ber_choice(actx, tree, tvb, offset,
645 PresentedAddressScreened_choice, hf_index, ett_isdn_sup_PresentedAddressScreened,
646 NULL);
648 return offset;
652 static const ber_sequence_t Address_sequence[] = {
653 { &hf_isdn_sup_partyNumber, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_PartyNumber },
654 { &hf_isdn_sup_partySubaddress, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_PartySubaddress },
655 { NULL, 0, 0, 0, NULL }
658 static int
659 dissect_isdn_sup_Address(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
660 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
661 Address_sequence, hf_index, ett_isdn_sup_Address);
663 return offset;
670 static const value_string isdn_sup_PresentedNumberUnscreened_vals[] = {
671 { 0, "presentationAllowedNumber" },
672 { 1, "presentationRestricted" },
673 { 2, "numberNotAvailableDueToInterworking" },
674 { 3, "presentationRestrictedNumber" },
675 { 0, NULL }
678 static const ber_choice_t PresentedNumberUnscreened_choice[] = {
679 { 0, &hf_isdn_sup_presentationAllowedNumber, BER_CLASS_CON, 0, 0, dissect_isdn_sup_PartyNumber },
680 { 1, &hf_isdn_sup_presentationRestricted, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_NULL },
681 { 2, &hf_isdn_sup_numberNotAvailableDueToInterworking, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_isdn_sup_NULL },
682 { 3, &hf_isdn_sup_presentationRestrictedNumber, BER_CLASS_CON, 3, 0, dissect_isdn_sup_PartyNumber },
683 { 0, NULL, 0, 0, 0, NULL }
686 static int
687 dissect_isdn_sup_PresentedNumberUnscreened(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
688 offset = dissect_ber_choice(actx, tree, tvb, offset,
689 PresentedNumberUnscreened_choice, hf_index, ett_isdn_sup_PresentedNumberUnscreened,
690 NULL);
692 return offset;
697 static int
698 dissect_isdn_sup_PresentationAllowedIndicator(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
699 offset = dissect_ber_boolean(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
701 return offset;
705 static const value_string isdn_sup_BasicService_vals[] = {
706 { 0, "allServices" },
707 { 1, "speech" },
708 { 2, "unrestrictedDigitalInformation" },
709 { 3, "audio3k1Hz" },
710 { 4, "unrestrictedDigitalInformationWithTonesAndAnnouncements" },
711 { 5, "multirate" },
712 { 32, "telephony3k1Hz" },
713 { 33, "teletex" },
714 { 34, "telefaxGroup4Class1" },
715 { 35, "videotexSyntaxBased" },
716 { 36, "videotelephony" },
717 { 37, "telefaxGroup2-3" },
718 { 38, "telephony7kHz" },
719 { 39, "euroFileTransfer" },
720 { 40, "fileTransferAndAccessManagement" },
721 { 41, "videoconference" },
722 { 42, "audioGraphicConference" },
723 { 0, NULL }
727 static int
728 dissect_isdn_sup_BasicService(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
729 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
730 NULL);
732 return offset;
737 static int
738 dissect_isdn_sup_OCTET_STRING(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
739 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
740 NULL);
742 return offset;
747 static int
748 dissect_isdn_sup_Q931InformationElement(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
749 offset = dissect_ber_tagged_type(implicit_tag, actx, tree, tvb, offset,
750 hf_index, BER_CLASS_APP, 0, true, dissect_isdn_sup_OCTET_STRING);
752 return offset;
756 static const value_string isdn_sup_ChargingCase_vals[] = {
757 { 0, "chargingInformationAtCallSetup" },
758 { 1, "chargingDuringACall" },
759 { 2, "chargingAtTheEndOfACall" },
760 { 0, NULL }
764 static int
765 dissect_isdn_sup_ChargingCase(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
766 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
767 NULL);
769 return offset;
774 static int
775 dissect_isdn_sup_ChargingRequestArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
776 offset = dissect_isdn_sup_ChargingCase(implicit_tag, tvb, offset, actx, tree, hf_index);
778 return offset;
782 static const value_string isdn_sup_ChargedItem_vals[] = {
783 { 0, "basicCommunication" },
784 { 1, "callAttempt" },
785 { 2, "callSetup" },
786 { 3, "userToUserInfo" },
787 { 4, "operationOfSupplementaryServ" },
788 { 0, NULL }
792 static int
793 dissect_isdn_sup_ChargedItem(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
794 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
795 NULL);
797 return offset;
802 static int
803 dissect_isdn_sup_Currency(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
804 offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
805 actx, tree, tvb, offset, hf_index,
806 NULL);
808 return offset;
813 static int
814 dissect_isdn_sup_CurrencyAmount(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
815 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
816 NULL);
818 return offset;
822 static const value_string isdn_sup_Multiplier_vals[] = {
823 { 0, "oneThousandth" },
824 { 1, "oneHundredth" },
825 { 2, "oneTenth" },
826 { 3, "one" },
827 { 4, "ten" },
828 { 5, "hundred" },
829 { 6, "thousand" },
830 { 0, NULL }
834 static int
835 dissect_isdn_sup_Multiplier(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
836 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
837 NULL);
839 return offset;
843 static const ber_sequence_t Amount_sequence[] = {
844 { &hf_isdn_sup_currencyAmount, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_CurrencyAmount },
845 { &hf_isdn_sup_multiplier , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_isdn_sup_Multiplier },
846 { NULL, 0, 0, 0, NULL }
849 static int
850 dissect_isdn_sup_Amount(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
851 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
852 Amount_sequence, hf_index, ett_isdn_sup_Amount);
854 return offset;
858 static const value_string isdn_sup_ChargingType_vals[] = {
859 { 0, "continuousCharging" },
860 { 1, "stepFunction" },
861 { 0, NULL }
865 static int
866 dissect_isdn_sup_ChargingType(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
867 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
868 NULL);
870 return offset;
875 static int
876 dissect_isdn_sup_LengthOfTimeUnit(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
877 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
878 NULL);
880 return offset;
884 static const value_string isdn_sup_Scale_vals[] = {
885 { 0, "oneHundredthSecond" },
886 { 1, "oneTenthSecond" },
887 { 2, "oneSecond" },
888 { 3, "tenSeconds" },
889 { 4, "oneMinute" },
890 { 5, "oneHour" },
891 { 6, "twentyFourHours" },
892 { 0, NULL }
896 static int
897 dissect_isdn_sup_Scale(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
898 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
899 NULL);
901 return offset;
905 static const ber_sequence_t Time_sequence[] = {
906 { &hf_isdn_sup_lengthOfTimeUnit, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_LengthOfTimeUnit },
907 { &hf_isdn_sup_scale , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_isdn_sup_Scale },
908 { NULL, 0, 0, 0, NULL }
911 static int
912 dissect_isdn_sup_Time(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
913 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
914 Time_sequence, hf_index, ett_isdn_sup_Time);
916 return offset;
920 static const ber_sequence_t DurationCurrency_sequence[] = {
921 { &hf_isdn_sup_dCurrency , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_Currency },
922 { &hf_isdn_sup_dAmount , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_isdn_sup_Amount },
923 { &hf_isdn_sup_dChargingType, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_isdn_sup_ChargingType },
924 { &hf_isdn_sup_dTime , BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_isdn_sup_Time },
925 { &hf_isdn_sup_dGranularity, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_isdn_sup_Time },
926 { NULL, 0, 0, 0, NULL }
929 static int
930 dissect_isdn_sup_DurationCurrency(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
931 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
932 DurationCurrency_sequence, hf_index, ett_isdn_sup_DurationCurrency);
934 return offset;
938 static const ber_sequence_t FlatRateCurrency_sequence[] = {
939 { &hf_isdn_sup_fRCurrency , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_Currency },
940 { &hf_isdn_sup_fRAmount , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_isdn_sup_Amount },
941 { NULL, 0, 0, 0, NULL }
944 static int
945 dissect_isdn_sup_FlatRateCurrency(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
946 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
947 FlatRateCurrency_sequence, hf_index, ett_isdn_sup_FlatRateCurrency);
949 return offset;
953 static const value_string isdn_sup_VolumeUnit_vals[] = {
954 { 0, "octet" },
955 { 1, "segment" },
956 { 2, "message" },
957 { 0, NULL }
961 static int
962 dissect_isdn_sup_VolumeUnit(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
963 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
964 NULL);
966 return offset;
970 static const ber_sequence_t VolumeRateCurrency_sequence[] = {
971 { &hf_isdn_sup_vRCurrency , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_Currency },
972 { &hf_isdn_sup_vRAmount , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_isdn_sup_Amount },
973 { &hf_isdn_sup_vRVolumeUnit, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_isdn_sup_VolumeUnit },
974 { NULL, 0, 0, 0, NULL }
977 static int
978 dissect_isdn_sup_VolumeRateCurrency(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
979 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
980 VolumeRateCurrency_sequence, hf_index, ett_isdn_sup_VolumeRateCurrency);
982 return offset;
986 static const value_string isdn_sup_AOCSChargingTypeSpecificCurrency_vals[] = {
987 { 1, "durationCurrency" },
988 { 2, "flatRateCurrency" },
989 { 3, "volumeRateCurrency" },
990 { 0, NULL }
993 static const ber_choice_t AOCSChargingTypeSpecificCurrency_choice[] = {
994 { 1, &hf_isdn_sup_durationCurrency, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_DurationCurrency },
995 { 2, &hf_isdn_sup_flatRateCurrency, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_isdn_sup_FlatRateCurrency },
996 { 3, &hf_isdn_sup_volumeRateCurrency, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_isdn_sup_VolumeRateCurrency },
997 { 0, NULL, 0, 0, 0, NULL }
1000 static int
1001 dissect_isdn_sup_AOCSChargingTypeSpecificCurrency(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1002 offset = dissect_ber_choice(actx, tree, tvb, offset,
1003 AOCSChargingTypeSpecificCurrency_choice, hf_index, ett_isdn_sup_AOCSChargingTypeSpecificCurrency,
1004 NULL);
1006 return offset;
1011 static int
1012 dissect_isdn_sup_SpecialChargingCode(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1013 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1014 NULL);
1016 return offset;
1020 static const value_string isdn_sup_T_chargingtype_vals[] = {
1021 { 0, "specificCurrency" },
1022 { 1, "specialChargingCode" },
1023 { 2, "freeOfCharge" },
1024 { 3, "currencyInfoNotAvailable" },
1025 { 0, NULL }
1028 static const ber_choice_t T_chargingtype_choice[] = {
1029 { 0, &hf_isdn_sup_aocschargingtypespecificCurrency, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_AOCSChargingTypeSpecificCurrency },
1030 { 1, &hf_isdn_sup_specialChargingCode, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_SpecialChargingCode },
1031 { 2, &hf_isdn_sup_freeOfCharge, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_isdn_sup_NULL },
1032 { 3, &hf_isdn_sup_currencyInfoNotAvailable, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_isdn_sup_NULL },
1033 { 0, NULL, 0, 0, 0, NULL }
1036 static int
1037 dissect_isdn_sup_T_chargingtype(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1038 offset = dissect_ber_choice(actx, tree, tvb, offset,
1039 T_chargingtype_choice, hf_index, ett_isdn_sup_T_chargingtype,
1040 NULL);
1042 return offset;
1046 static const ber_sequence_t AOCSCurrencyInfo_sequence[] = {
1047 { &hf_isdn_sup_chargedItem, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_ChargedItem },
1048 { &hf_isdn_sup_chargingtype, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_T_chargingtype },
1049 { NULL, 0, 0, 0, NULL }
1052 static int
1053 dissect_isdn_sup_AOCSCurrencyInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1054 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1055 AOCSCurrencyInfo_sequence, hf_index, ett_isdn_sup_AOCSCurrencyInfo);
1057 return offset;
1061 static const ber_sequence_t AOCSCurrencyInfoList_sequence_of[1] = {
1062 { &hf_isdn_sup_AOCSCurrencyInfoList_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_AOCSCurrencyInfo },
1065 static int
1066 dissect_isdn_sup_AOCSCurrencyInfoList(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1067 offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
1068 AOCSCurrencyInfoList_sequence_of, hf_index, ett_isdn_sup_AOCSCurrencyInfoList);
1070 return offset;
1075 static int
1076 dissect_isdn_sup_AOCSSpecialArrInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1077 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1078 NULL);
1080 return offset;
1084 static const value_string isdn_sup_ChargingRequestRes_vals[] = {
1085 { 0, "aOCSCurrencyInfoList" },
1086 { 1, "aOCSSpecialArrInfo" },
1087 { 2, "chargingInfoFollows" },
1088 { 0, NULL }
1091 static const ber_choice_t ChargingRequestRes_choice[] = {
1092 { 0, &hf_isdn_sup_aOCSCurrencyInfoList, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_AOCSCurrencyInfoList },
1093 { 1, &hf_isdn_sup_aOCSSpecialArrInfo, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_AOCSSpecialArrInfo },
1094 { 2, &hf_isdn_sup_chargingInfoFollows, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_NULL },
1095 { 0, NULL, 0, 0, 0, NULL }
1098 static int
1099 dissect_isdn_sup_ChargingRequestRes(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1100 offset = dissect_ber_choice(actx, tree, tvb, offset,
1101 ChargingRequestRes_choice, hf_index, ett_isdn_sup_ChargingRequestRes,
1102 NULL);
1104 return offset;
1108 static const value_string isdn_sup_AOCSCurrencyArg_vals[] = {
1109 { 0, "chargeNotAvailable" },
1110 { 1, "aOCSCurrencyInfoList" },
1111 { 0, NULL }
1114 static const ber_choice_t AOCSCurrencyArg_choice[] = {
1115 { 0, &hf_isdn_sup_chargeNotAvailable, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_NULL },
1116 { 1, &hf_isdn_sup_aOCSCurrencyInfoList, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_AOCSCurrencyInfoList },
1117 { 0, NULL, 0, 0, 0, NULL }
1120 static int
1121 dissect_isdn_sup_AOCSCurrencyArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1122 offset = dissect_ber_choice(actx, tree, tvb, offset,
1123 AOCSCurrencyArg_choice, hf_index, ett_isdn_sup_AOCSCurrencyArg,
1124 NULL);
1126 return offset;
1130 static const value_string isdn_sup_AOCSSpecialArrArg_vals[] = {
1131 { 0, "chargeNotAvailable" },
1132 { 1, "aOCSSpecialArrInfo" },
1133 { 0, NULL }
1136 static const ber_choice_t AOCSSpecialArrArg_choice[] = {
1137 { 0, &hf_isdn_sup_chargeNotAvailable, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_NULL },
1138 { 1, &hf_isdn_sup_aOCSSpecialArrInfo, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_AOCSSpecialArrInfo },
1139 { 0, NULL, 0, 0, 0, NULL }
1142 static int
1143 dissect_isdn_sup_AOCSSpecialArrArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1144 offset = dissect_ber_choice(actx, tree, tvb, offset,
1145 AOCSSpecialArrArg_choice, hf_index, ett_isdn_sup_AOCSSpecialArrArg,
1146 NULL);
1148 return offset;
1152 static const ber_sequence_t RecordedCurrency_sequence[] = {
1153 { &hf_isdn_sup_rCurrency , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_Currency },
1154 { &hf_isdn_sup_rAmount , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_isdn_sup_Amount },
1155 { NULL, 0, 0, 0, NULL }
1158 static int
1159 dissect_isdn_sup_RecordedCurrency(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1160 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1161 RecordedCurrency_sequence, hf_index, ett_isdn_sup_RecordedCurrency);
1163 return offset;
1167 static const value_string isdn_sup_TypeOfChargingInfo_vals[] = {
1168 { 0, "subTotal" },
1169 { 1, "total" },
1170 { 0, NULL }
1174 static int
1175 dissect_isdn_sup_TypeOfChargingInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1176 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1177 NULL);
1179 return offset;
1183 static const value_string isdn_sup_AOCDBillingId_vals[] = {
1184 { 0, "normalCharging" },
1185 { 1, "reverseCharging" },
1186 { 2, "creditCardCharging" },
1187 { 0, NULL }
1191 static int
1192 dissect_isdn_sup_AOCDBillingId(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1193 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1194 NULL);
1196 return offset;
1200 static const ber_sequence_t AOCDSpecificCurrency_sequence[] = {
1201 { &hf_isdn_sup_recordedCurrency, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_RecordedCurrency },
1202 { &hf_isdn_sup_typeOfChargingInfo, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_isdn_sup_TypeOfChargingInfo },
1203 { &hf_isdn_sup_aOCDBillingId, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_isdn_sup_AOCDBillingId },
1204 { NULL, 0, 0, 0, NULL }
1207 static int
1208 dissect_isdn_sup_AOCDSpecificCurrency(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1209 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1210 AOCDSpecificCurrency_sequence, hf_index, ett_isdn_sup_AOCDSpecificCurrency);
1212 return offset;
1216 static const value_string isdn_sup_AOCDCurrencyInfo_vals[] = {
1217 { 0, "specificCurrency" },
1218 { 1, "freeOfCharge" },
1219 { 0, NULL }
1222 static const ber_choice_t AOCDCurrencyInfo_choice[] = {
1223 { 0, &hf_isdn_sup_aocdspecificCurrency, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_AOCDSpecificCurrency },
1224 { 1, &hf_isdn_sup_freeOfCharge, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_NULL },
1225 { 0, NULL, 0, 0, 0, NULL }
1228 static int
1229 dissect_isdn_sup_AOCDCurrencyInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1230 offset = dissect_ber_choice(actx, tree, tvb, offset,
1231 AOCDCurrencyInfo_choice, hf_index, ett_isdn_sup_AOCDCurrencyInfo,
1232 NULL);
1234 return offset;
1238 static const value_string isdn_sup_AOCDCurrencyArg_vals[] = {
1239 { 0, "chargeNotAvailable" },
1240 { 1, "aOCDCurrencyInfo" },
1241 { 0, NULL }
1244 static const ber_choice_t AOCDCurrencyArg_choice[] = {
1245 { 0, &hf_isdn_sup_chargeNotAvailable, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_NULL },
1246 { 1, &hf_isdn_sup_aOCDCurrencyInfo, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_AOCDCurrencyInfo },
1247 { 0, NULL, 0, 0, 0, NULL }
1250 static int
1251 dissect_isdn_sup_AOCDCurrencyArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1252 offset = dissect_ber_choice(actx, tree, tvb, offset,
1253 AOCDCurrencyArg_choice, hf_index, ett_isdn_sup_AOCDCurrencyArg,
1254 NULL);
1256 return offset;
1261 static int
1262 dissect_isdn_sup_NumberOfUnits(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1263 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1264 NULL);
1266 return offset;
1270 static const value_string isdn_sup_RecoredUnitsCc_vals[] = {
1271 { 0, "recordedNumberOfUnits" },
1272 { 1, "notAvailable" },
1273 { 0, NULL }
1276 static const ber_choice_t RecoredUnitsCc_choice[] = {
1277 { 0, &hf_isdn_sup_recordedNumberOfUnits, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_NumberOfUnits },
1278 { 1, &hf_isdn_sup_notAvailable, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_NULL },
1279 { 0, NULL, 0, 0, 0, NULL }
1282 static int
1283 dissect_isdn_sup_RecoredUnitsCc(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1284 offset = dissect_ber_choice(actx, tree, tvb, offset,
1285 RecoredUnitsCc_choice, hf_index, ett_isdn_sup_RecoredUnitsCc,
1286 NULL);
1288 return offset;
1293 static int
1294 dissect_isdn_sup_TypeOfUnit(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1295 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1296 NULL);
1298 return offset;
1302 static const ber_sequence_t RecordedUnits_sequence[] = {
1303 { &hf_isdn_sup_recoredunitscc, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_RecoredUnitsCc },
1304 { &hf_isdn_sup_recordedTypeOfUnits, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_isdn_sup_TypeOfUnit },
1305 { NULL, 0, 0, 0, NULL }
1308 static int
1309 dissect_isdn_sup_RecordedUnits(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1310 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1311 RecordedUnits_sequence, hf_index, ett_isdn_sup_RecordedUnits);
1313 return offset;
1317 static const ber_sequence_t RecordedUnitsList_sequence_of[1] = {
1318 { &hf_isdn_sup_RecordedUnitsList_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_RecordedUnits },
1321 static int
1322 dissect_isdn_sup_RecordedUnitsList(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1323 offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
1324 RecordedUnitsList_sequence_of, hf_index, ett_isdn_sup_RecordedUnitsList);
1326 return offset;
1330 static const ber_sequence_t AOCDSpecificChargingUnits_sequence[] = {
1331 { &hf_isdn_sup_recordedUnitsList, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_RecordedUnitsList },
1332 { &hf_isdn_sup_typeOfChargingInfo, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_isdn_sup_TypeOfChargingInfo },
1333 { &hf_isdn_sup_aOCDBillingId, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_isdn_sup_AOCDBillingId },
1334 { NULL, 0, 0, 0, NULL }
1337 static int
1338 dissect_isdn_sup_AOCDSpecificChargingUnits(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1339 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1340 AOCDSpecificChargingUnits_sequence, hf_index, ett_isdn_sup_AOCDSpecificChargingUnits);
1342 return offset;
1346 static const value_string isdn_sup_AOCDChargingUnitInfo_vals[] = {
1347 { 0, "specificChargingUnits" },
1348 { 1, "freeOfCharge" },
1349 { 0, NULL }
1352 static const ber_choice_t AOCDChargingUnitInfo_choice[] = {
1353 { 0, &hf_isdn_sup_aocdspecificchargingunits, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_AOCDSpecificChargingUnits },
1354 { 1, &hf_isdn_sup_freeOfCharge, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_NULL },
1355 { 0, NULL, 0, 0, 0, NULL }
1358 static int
1359 dissect_isdn_sup_AOCDChargingUnitInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1360 offset = dissect_ber_choice(actx, tree, tvb, offset,
1361 AOCDChargingUnitInfo_choice, hf_index, ett_isdn_sup_AOCDChargingUnitInfo,
1362 NULL);
1364 return offset;
1368 static const value_string isdn_sup_AOCDChargingUnitArg_vals[] = {
1369 { 0, "chargeNotAvailable" },
1370 { 1, "aOCDChargingUnitInfo" },
1371 { 0, NULL }
1374 static const ber_choice_t AOCDChargingUnitArg_choice[] = {
1375 { 0, &hf_isdn_sup_chargeNotAvailable, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_NULL },
1376 { 1, &hf_isdn_sup_aOCDChargingUnitInfo, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_AOCDChargingUnitInfo },
1377 { 0, NULL, 0, 0, 0, NULL }
1380 static int
1381 dissect_isdn_sup_AOCDChargingUnitArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1382 offset = dissect_ber_choice(actx, tree, tvb, offset,
1383 AOCDChargingUnitArg_choice, hf_index, ett_isdn_sup_AOCDChargingUnitArg,
1384 NULL);
1386 return offset;
1390 static const value_string isdn_sup_AOCEBillingId_vals[] = {
1391 { 0, "normalCharging" },
1392 { 1, "reverseCharging" },
1393 { 2, "creditCardCharging" },
1394 { 3, "callForwardingUnconditional" },
1395 { 4, "callForwardingBusy" },
1396 { 5, "callForwardingNoReply" },
1397 { 6, "callDeflection" },
1398 { 7, "callTransfer" },
1399 { 0, NULL }
1403 static int
1404 dissect_isdn_sup_AOCEBillingId(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1405 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1406 NULL);
1408 return offset;
1412 static const ber_sequence_t AOCECcSpecificCurrency_sequence[] = {
1413 { &hf_isdn_sup_recordedCurrency, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_RecordedCurrency },
1414 { &hf_isdn_sup_aOCEBillingId, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_isdn_sup_AOCEBillingId },
1415 { NULL, 0, 0, 0, NULL }
1418 static int
1419 dissect_isdn_sup_AOCECcSpecificCurrency(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1420 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1421 AOCECcSpecificCurrency_sequence, hf_index, ett_isdn_sup_AOCECcSpecificCurrency);
1423 return offset;
1427 static const value_string isdn_sup_AOCECurrencyCc_vals[] = {
1428 { 0, "specificCurrency" },
1429 { 1, "freeOfCharge" },
1430 { 0, NULL }
1433 static const ber_choice_t AOCECurrencyCc_choice[] = {
1434 { 0, &hf_isdn_sup_aoceccspecificCurrency, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_AOCECcSpecificCurrency },
1435 { 1, &hf_isdn_sup_freeOfCharge, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_NULL },
1436 { 0, NULL, 0, 0, 0, NULL }
1439 static int
1440 dissect_isdn_sup_AOCECurrencyCc(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1441 offset = dissect_ber_choice(actx, tree, tvb, offset,
1442 AOCECurrencyCc_choice, hf_index, ett_isdn_sup_AOCECurrencyCc,
1443 NULL);
1445 return offset;
1450 static int
1451 dissect_isdn_sup_ChargeIdentifier(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1452 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1453 NULL);
1455 return offset;
1459 static const value_string isdn_sup_ChargingAssociation_vals[] = {
1460 { 0, "chargeNumber" },
1461 { 1, "chargeIdentifier" },
1462 { 0, NULL }
1465 static const ber_choice_t ChargingAssociation_choice[] = {
1466 { 0, &hf_isdn_sup_chargeNumber, BER_CLASS_CON, 0, 0, dissect_isdn_sup_PartyNumber },
1467 { 1, &hf_isdn_sup_chargeIdentifier, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_ChargeIdentifier },
1468 { 0, NULL, 0, 0, 0, NULL }
1471 static int
1472 dissect_isdn_sup_ChargingAssociation(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1473 offset = dissect_ber_choice(actx, tree, tvb, offset,
1474 ChargingAssociation_choice, hf_index, ett_isdn_sup_ChargingAssociation,
1475 NULL);
1477 return offset;
1481 static const ber_sequence_t AOCECurrencyInfo_sequence[] = {
1482 { &hf_isdn_sup_aocecurrencycc, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_AOCECurrencyCc },
1483 { &hf_isdn_sup_chargingAssociation, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_ChargingAssociation },
1484 { NULL, 0, 0, 0, NULL }
1487 static int
1488 dissect_isdn_sup_AOCECurrencyInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1489 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1490 AOCECurrencyInfo_sequence, hf_index, ett_isdn_sup_AOCECurrencyInfo);
1492 return offset;
1496 static const value_string isdn_sup_AOCECurrencyArg_vals[] = {
1497 { 0, "chargeNotAvailable" },
1498 { 1, "aOCECurrencyInfo" },
1499 { 0, NULL }
1502 static const ber_choice_t AOCECurrencyArg_choice[] = {
1503 { 0, &hf_isdn_sup_chargeNotAvailable, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_NULL },
1504 { 1, &hf_isdn_sup_aOCECurrencyInfo, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_AOCECurrencyInfo },
1505 { 0, NULL, 0, 0, 0, NULL }
1508 static int
1509 dissect_isdn_sup_AOCECurrencyArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1510 offset = dissect_ber_choice(actx, tree, tvb, offset,
1511 AOCECurrencyArg_choice, hf_index, ett_isdn_sup_AOCECurrencyArg,
1512 NULL);
1514 return offset;
1518 static const ber_sequence_t AOCECcSpecificChargingUnits_sequence[] = {
1519 { &hf_isdn_sup_recordedUnitsList, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_RecordedUnitsList },
1520 { &hf_isdn_sup_aOCEBillingId, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_isdn_sup_AOCEBillingId },
1521 { NULL, 0, 0, 0, NULL }
1524 static int
1525 dissect_isdn_sup_AOCECcSpecificChargingUnits(bool 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_sequence(implicit_tag, actx, tree, tvb, offset,
1527 AOCECcSpecificChargingUnits_sequence, hf_index, ett_isdn_sup_AOCECcSpecificChargingUnits);
1529 return offset;
1533 static const value_string isdn_sup_AOCEChargingUnitCc_vals[] = {
1534 { 0, "specificChargingUnits" },
1535 { 1, "freeOfCharge" },
1536 { 0, NULL }
1539 static const ber_choice_t AOCEChargingUnitCc_choice[] = {
1540 { 0, &hf_isdn_sup_aoceccspecificchargingunits, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_AOCECcSpecificChargingUnits },
1541 { 1, &hf_isdn_sup_freeOfCharge, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_NULL },
1542 { 0, NULL, 0, 0, 0, NULL }
1545 static int
1546 dissect_isdn_sup_AOCEChargingUnitCc(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1547 offset = dissect_ber_choice(actx, tree, tvb, offset,
1548 AOCEChargingUnitCc_choice, hf_index, ett_isdn_sup_AOCEChargingUnitCc,
1549 NULL);
1551 return offset;
1555 static const ber_sequence_t AOCEChargingUnitInfo_sequence[] = {
1556 { &hf_isdn_sup_aocechargingunitcc, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_AOCEChargingUnitCc },
1557 { &hf_isdn_sup_chargingAssociation, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_ChargingAssociation },
1558 { NULL, 0, 0, 0, NULL }
1561 static int
1562 dissect_isdn_sup_AOCEChargingUnitInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1563 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1564 AOCEChargingUnitInfo_sequence, hf_index, ett_isdn_sup_AOCEChargingUnitInfo);
1566 return offset;
1570 static const value_string isdn_sup_AOCEChargingUnitArg_vals[] = {
1571 { 0, "chargeNotAvailable" },
1572 { 1, "aOCEChargingUnitInfo" },
1573 { 0, NULL }
1576 static const ber_choice_t AOCEChargingUnitArg_choice[] = {
1577 { 0, &hf_isdn_sup_chargeNotAvailable, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_NULL },
1578 { 1, &hf_isdn_sup_aOCEChargingUnitInfo, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_AOCEChargingUnitInfo },
1579 { 0, NULL, 0, 0, 0, NULL }
1582 static int
1583 dissect_isdn_sup_AOCEChargingUnitArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1584 offset = dissect_ber_choice(actx, tree, tvb, offset,
1585 AOCEChargingUnitArg_choice, hf_index, ett_isdn_sup_AOCEChargingUnitArg,
1586 NULL);
1588 return offset;
1593 static int
1594 dissect_isdn_sup_OARequested(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1595 offset = dissect_ber_tagged_type(implicit_tag, actx, tree, tvb, offset,
1596 hf_index, BER_CLASS_CON, 1, true, dissect_isdn_sup_BOOLEAN);
1598 return offset;
1603 static int
1604 dissect_isdn_sup_INTEGER_0_32767(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1605 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1606 NULL);
1608 return offset;
1613 static int
1614 dissect_isdn_sup_CUGIndex(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1615 offset = dissect_ber_tagged_type(implicit_tag, actx, tree, tvb, offset,
1616 hf_index, BER_CLASS_CON, 2, true, dissect_isdn_sup_INTEGER_0_32767);
1618 return offset;
1622 static const ber_sequence_t CUGcallArg_sequence[] = {
1623 { &hf_isdn_sup_oARequested, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_isdn_sup_OARequested },
1624 { &hf_isdn_sup_cUGIndex , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_isdn_sup_CUGIndex },
1625 { NULL, 0, 0, 0, NULL }
1628 static int
1629 dissect_isdn_sup_CUGcallArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1630 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1631 CUGcallArg_sequence, hf_index, ett_isdn_sup_CUGcallArg);
1633 return offset;
1638 static int
1639 dissect_isdn_sup_ConfSize(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1640 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1641 NULL);
1643 return offset;
1648 static int
1649 dissect_isdn_sup_BeginCONFArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1650 offset = dissect_isdn_sup_ConfSize(implicit_tag, tvb, offset, actx, tree, hf_index);
1652 return offset;
1657 static int
1658 dissect_isdn_sup_ConferenceId(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1659 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1660 NULL);
1662 return offset;
1667 static int
1668 dissect_isdn_sup_PartyId(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1669 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1670 NULL);
1672 return offset;
1676 static const ber_sequence_t BeginCONFRes_sequence[] = {
1677 { &hf_isdn_sup_conferenceId, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_ConferenceId },
1678 { &hf_isdn_sup_partyId , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_isdn_sup_PartyId },
1679 { NULL, 0, 0, 0, NULL }
1682 static int
1683 dissect_isdn_sup_BeginCONFRes(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1684 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1685 BeginCONFRes_sequence, hf_index, ett_isdn_sup_BeginCONFRes);
1687 return offset;
1692 static int
1693 dissect_isdn_sup_AddCONFArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1694 offset = dissect_isdn_sup_ConferenceId(implicit_tag, tvb, offset, actx, tree, hf_index);
1696 return offset;
1701 static int
1702 dissect_isdn_sup_AddCONFRes(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1703 offset = dissect_isdn_sup_PartyId(implicit_tag, tvb, offset, actx, tree, hf_index);
1705 return offset;
1709 static const ber_sequence_t SplitCONFArg_sequence[] = {
1710 { &hf_isdn_sup_conferenceId, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_ConferenceId },
1711 { &hf_isdn_sup_partyId , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_PartyId },
1712 { NULL, 0, 0, 0, NULL }
1715 static int
1716 dissect_isdn_sup_SplitCONFArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1717 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1718 SplitCONFArg_sequence, hf_index, ett_isdn_sup_SplitCONFArg);
1720 return offset;
1725 static int
1726 dissect_isdn_sup_DropCONFArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1727 offset = dissect_isdn_sup_PartyId(implicit_tag, tvb, offset, actx, tree, hf_index);
1729 return offset;
1734 static int
1735 dissect_isdn_sup_IsolateCONFArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1736 offset = dissect_isdn_sup_PartyId(implicit_tag, tvb, offset, actx, tree, hf_index);
1738 return offset;
1743 static int
1744 dissect_isdn_sup_ReattachCONFArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1745 offset = dissect_isdn_sup_PartyId(implicit_tag, tvb, offset, actx, tree, hf_index);
1747 return offset;
1752 static int
1753 dissect_isdn_sup_PartyDISCArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1754 offset = dissect_isdn_sup_PartyId(implicit_tag, tvb, offset, actx, tree, hf_index);
1756 return offset;
1760 static const value_string isdn_sup_Procedure_vals[] = {
1761 { 0, "cfu" },
1762 { 1, "cfb" },
1763 { 2, "cfnr" },
1764 { 0, NULL }
1768 static int
1769 dissect_isdn_sup_Procedure(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1770 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1771 NULL);
1773 return offset;
1777 static const value_string isdn_sup_ServedUserNr_vals[] = {
1778 { 0, "individualNumber" },
1779 { 1, "allNumbers" },
1780 { 0, NULL }
1783 static const ber_choice_t ServedUserNr_choice[] = {
1784 { 0, &hf_isdn_sup_individualNumber, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_PartyNumber },
1785 { 1, &hf_isdn_sup_allNumbers , BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_NULL },
1786 { 0, NULL, 0, 0, 0, NULL }
1789 static int
1790 dissect_isdn_sup_ServedUserNr(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1791 offset = dissect_ber_choice(actx, tree, tvb, offset,
1792 ServedUserNr_choice, hf_index, ett_isdn_sup_ServedUserNr,
1793 NULL);
1795 return offset;
1800 static int
1801 dissect_isdn_sup_NoReplyTimer(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1802 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1803 NULL);
1805 return offset;
1809 static const ber_sequence_t ActivationDiversionArg_sequence[] = {
1810 { &hf_isdn_sup_procedure , BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_Procedure },
1811 { &hf_isdn_sup_basicService, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_BasicService },
1812 { &hf_isdn_sup_forwardedToAddress, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_Address },
1813 { &hf_isdn_sup_servedUserNr, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_ServedUserNr },
1814 { &hf_isdn_sup_noReplyTimer, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_isdn_sup_NoReplyTimer },
1815 { NULL, 0, 0, 0, NULL }
1818 static int
1819 dissect_isdn_sup_ActivationDiversionArg(bool 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 ActivationDiversionArg_sequence, hf_index, ett_isdn_sup_ActivationDiversionArg);
1823 return offset;
1827 static const ber_sequence_t DeactivationDiversionArg_sequence[] = {
1828 { &hf_isdn_sup_procedure , BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_Procedure },
1829 { &hf_isdn_sup_basicService, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_BasicService },
1830 { &hf_isdn_sup_servedUserNr, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_ServedUserNr },
1831 { NULL, 0, 0, 0, NULL }
1834 static int
1835 dissect_isdn_sup_DeactivationDiversionArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1836 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1837 DeactivationDiversionArg_sequence, hf_index, ett_isdn_sup_DeactivationDiversionArg);
1839 return offset;
1843 static const ber_sequence_t ActivationStatusNotificationDivArg_sequence[] = {
1844 { &hf_isdn_sup_procedure , BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_Procedure },
1845 { &hf_isdn_sup_basicService, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_BasicService },
1846 { &hf_isdn_sup_forwardedToAddresss, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_Address },
1847 { &hf_isdn_sup_servedUserNr, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_ServedUserNr },
1848 { NULL, 0, 0, 0, NULL }
1851 static int
1852 dissect_isdn_sup_ActivationStatusNotificationDivArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1853 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1854 ActivationStatusNotificationDivArg_sequence, hf_index, ett_isdn_sup_ActivationStatusNotificationDivArg);
1856 return offset;
1860 static const ber_sequence_t DeactivationStatusNotificationDivArg_sequence[] = {
1861 { &hf_isdn_sup_procedure , BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_Procedure },
1862 { &hf_isdn_sup_basicService, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_BasicService },
1863 { &hf_isdn_sup_servedUserNr, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_ServedUserNr },
1864 { NULL, 0, 0, 0, NULL }
1867 static int
1868 dissect_isdn_sup_DeactivationStatusNotificationDivArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1869 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1870 DeactivationStatusNotificationDivArg_sequence, hf_index, ett_isdn_sup_DeactivationStatusNotificationDivArg);
1872 return offset;
1876 static const ber_sequence_t InterrogationDiversionArg_sequence[] = {
1877 { &hf_isdn_sup_procedure , BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_Procedure },
1878 { &hf_isdn_sup_basicService, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_isdn_sup_BasicService },
1879 { &hf_isdn_sup_servedUserNr, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_ServedUserNr },
1880 { NULL, 0, 0, 0, NULL }
1883 static int
1884 dissect_isdn_sup_InterrogationDiversionArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1885 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1886 InterrogationDiversionArg_sequence, hf_index, ett_isdn_sup_InterrogationDiversionArg);
1888 return offset;
1892 static const ber_sequence_t IntResult_sequence[] = {
1893 { &hf_isdn_sup_servedUserNr, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_ServedUserNr },
1894 { &hf_isdn_sup_basicService, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_BasicService },
1895 { &hf_isdn_sup_procedure , BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_Procedure },
1896 { &hf_isdn_sup_forwardedToAddress, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_Address },
1897 { NULL, 0, 0, 0, NULL }
1900 static int
1901 dissect_isdn_sup_IntResult(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1902 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1903 IntResult_sequence, hf_index, ett_isdn_sup_IntResult);
1905 return offset;
1909 static const ber_sequence_t IntResultList_set_of[1] = {
1910 { &hf_isdn_sup_IntResultList_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_IntResult },
1913 static int
1914 dissect_isdn_sup_IntResultList(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1915 offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
1916 IntResultList_set_of, hf_index, ett_isdn_sup_IntResultList);
1918 return offset;
1923 static int
1924 dissect_isdn_sup_InterrogationDiversionRes(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1925 offset = dissect_isdn_sup_IntResultList(implicit_tag, tvb, offset, actx, tree, hf_index);
1927 return offset;
1931 static const ber_sequence_t ServedUserNumberList_set_of[1] = {
1932 { &hf_isdn_sup_ServedUserNumberList_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_PartyNumber },
1935 static int
1936 dissect_isdn_sup_ServedUserNumberList(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1937 offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
1938 ServedUserNumberList_set_of, hf_index, ett_isdn_sup_ServedUserNumberList);
1940 return offset;
1945 static int
1946 dissect_isdn_sup_InterrogateServedUserNumbersRes(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1947 offset = dissect_isdn_sup_ServedUserNumberList(implicit_tag, tvb, offset, actx, tree, hf_index);
1949 return offset;
1953 static const value_string isdn_sup_DiversionReason_vals[] = {
1954 { 0, "unknown" },
1955 { 1, "cfu" },
1956 { 2, "cfb" },
1957 { 3, "cfnr" },
1958 { 4, "cdAlerting" },
1959 { 5, "cdImmediate" },
1960 { 0, NULL }
1964 static int
1965 dissect_isdn_sup_DiversionReason(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1966 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1967 NULL);
1969 return offset;
1973 static const ber_sequence_t DiversionInformationArg_sequence[] = {
1974 { &hf_isdn_sup_diversionReason, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_DiversionReason },
1975 { &hf_isdn_sup_basicService, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_BasicService },
1976 { &hf_isdn_sup_servedUserSubaddress, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_PartySubaddress },
1977 { &hf_isdn_sup_callingAddress, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_PresentedAddressScreened },
1978 { &hf_isdn_sup_originalCalledNr, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_PresentedNumberUnscreened },
1979 { &hf_isdn_sup_lastDivertingNr, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_PresentedNumberUnscreened },
1980 { &hf_isdn_sup_lastDivertingReason, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_isdn_sup_DiversionReason },
1981 { &hf_isdn_sup_userInfo , BER_CLASS_APP, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_isdn_sup_Q931InformationElement },
1982 { NULL, 0, 0, 0, NULL }
1985 static int
1986 dissect_isdn_sup_DiversionInformationArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1987 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1988 DiversionInformationArg_sequence, hf_index, ett_isdn_sup_DiversionInformationArg);
1990 return offset;
1994 static const ber_sequence_t CallDeflectionArg_sequence[] = {
1995 { &hf_isdn_sup_deflectionAddress, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_Address },
1996 { &hf_isdn_sup_presentationAllowedDivertedToUser, BER_CLASS_UNI, BER_UNI_TAG_BOOLEAN, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_isdn_sup_PresentationAllowedIndicator },
1997 { NULL, 0, 0, 0, NULL }
2000 static int
2001 dissect_isdn_sup_CallDeflectionArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2002 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2003 CallDeflectionArg_sequence, hf_index, ett_isdn_sup_CallDeflectionArg);
2005 return offset;
2010 static int
2011 dissect_isdn_sup_DiversionCounter(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2012 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2013 NULL);
2015 return offset;
2019 static const value_string isdn_sup_SubscriptionOption_vals[] = {
2020 { 0, "noNotification" },
2021 { 1, "notificationWithoutDivertedToNr" },
2022 { 2, "notificationWithDivertedToNr" },
2023 { 0, NULL }
2027 static int
2028 dissect_isdn_sup_SubscriptionOption(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2029 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2030 NULL);
2032 return offset;
2036 static const ber_sequence_t CallRerouteingArg_sequence[] = {
2037 { &hf_isdn_sup_rerouteingReason, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_DiversionReason },
2038 { &hf_isdn_sup_calledAddress, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_Address },
2039 { &hf_isdn_sup_rerouteingCounter, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_DiversionCounter },
2040 { &hf_isdn_sup_q931InfoElement, BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_Q931InformationElement },
2041 { &hf_isdn_sup_lastRerouteingNr, BER_CLASS_CON, 1, BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_PresentedNumberUnscreened },
2042 { &hf_isdn_sup_subscriptionOption, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_isdn_sup_SubscriptionOption },
2043 { &hf_isdn_sup_callingPartySubaddress, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_PartySubaddress },
2044 { NULL, 0, 0, 0, NULL }
2047 static int
2048 dissect_isdn_sup_CallRerouteingArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2049 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2050 CallRerouteingArg_sequence, hf_index, ett_isdn_sup_CallRerouteingArg);
2052 return offset;
2056 static const ber_sequence_t DivertingLegInformation1Arg_sequence[] = {
2057 { &hf_isdn_sup_diversionReason, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_DiversionReason },
2058 { &hf_isdn_sup_subscriptionOption, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_SubscriptionOption },
2059 { &hf_isdn_sup_divertedToNumber, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_PresentedNumberUnscreened },
2060 { NULL, 0, 0, 0, NULL }
2063 static int
2064 dissect_isdn_sup_DivertingLegInformation1Arg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2065 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2066 DivertingLegInformation1Arg_sequence, hf_index, ett_isdn_sup_DivertingLegInformation1Arg);
2068 return offset;
2072 static const ber_sequence_t DivertingLegInformation2Arg_sequence[] = {
2073 { &hf_isdn_sup_diversionCounter, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_DiversionCounter },
2074 { &hf_isdn_sup_diversionReason, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_DiversionReason },
2075 { &hf_isdn_sup_divertingNr, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_PresentedNumberUnscreened },
2076 { &hf_isdn_sup_originalCalledNr, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_PresentedNumberUnscreened },
2077 { NULL, 0, 0, 0, NULL }
2080 static int
2081 dissect_isdn_sup_DivertingLegInformation2Arg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2082 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2083 DivertingLegInformation2Arg_sequence, hf_index, ett_isdn_sup_DivertingLegInformation2Arg);
2085 return offset;
2090 static int
2091 dissect_isdn_sup_DivertingLegInformation3Arg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2092 offset = dissect_isdn_sup_PresentationAllowedIndicator(implicit_tag, tvb, offset, actx, tree, hf_index);
2094 return offset;
2098 static const value_string isdn_sup_Service_vals[] = {
2099 { 1, "service1" },
2100 { 2, "service2" },
2101 { 3, "service3" },
2102 { 0, NULL }
2106 static int
2107 dissect_isdn_sup_Service(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2108 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2109 NULL);
2111 return offset;
2116 static int
2117 dissect_isdn_sup_Preferred(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2118 offset = dissect_ber_boolean(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
2120 return offset;
2124 static const ber_sequence_t UserUserServiceArg_sequence[] = {
2125 { &hf_isdn_sup_service , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_Service },
2126 { &hf_isdn_sup_preferred , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_isdn_sup_Preferred },
2127 { NULL, 0, 0, 0, NULL }
2130 static int
2131 dissect_isdn_sup_UserUserServiceArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2132 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2133 UserUserServiceArg_sequence, hf_index, ett_isdn_sup_UserUserServiceArg);
2135 return offset;
2140 static int
2141 dissect_isdn_sup_CalledFreephoneNr(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2142 offset = dissect_isdn_sup_PartyNumber(implicit_tag, tvb, offset, actx, tree, hf_index);
2144 return offset;
2149 static int
2150 dissect_isdn_sup_CalledFreephoneNrArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2151 offset = dissect_isdn_sup_CalledFreephoneNr(implicit_tag, tvb, offset, actx, tree, hf_index);
2153 return offset;
2158 static int
2159 dissect_isdn_sup_QueueIdentity(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2160 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2161 NULL);
2163 return offset;
2167 static const ber_sequence_t Monitor_T_FPHArg_sequence[] = {
2168 { &hf_isdn_sup_q931InfoElement, BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_Q931InformationElement },
2169 { &hf_isdn_sup_servedUserDestination, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_PartyNumber },
2170 { &hf_isdn_sup_queueIdentity, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_isdn_sup_QueueIdentity },
2171 { NULL, 0, 0, 0, NULL }
2174 static int
2175 dissect_isdn_sup_Monitor_T_FPHArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2176 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2177 Monitor_T_FPHArg_sequence, hf_index, ett_isdn_sup_Monitor_T_FPHArg);
2179 return offset;
2184 static int
2185 dissect_isdn_sup_FPHReference(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2186 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2187 NULL);
2189 return offset;
2193 static const ber_sequence_t Free_T_FPHArg_sequence[] = {
2194 { &hf_isdn_sup_servedUserDestination, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_PartyNumber },
2195 { &hf_isdn_sup_fPHReference, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_FPHReference },
2196 { NULL, 0, 0, 0, NULL }
2199 static int
2200 dissect_isdn_sup_Free_T_FPHArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2201 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2202 Free_T_FPHArg_sequence, hf_index, ett_isdn_sup_Free_T_FPHArg);
2204 return offset;
2208 static const ber_sequence_t Call_T_FPHArg_sequence[] = {
2209 { &hf_isdn_sup_fPHReference, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_FPHReference },
2210 { &hf_isdn_sup_calledFreephoneNr, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_CalledFreephoneNr },
2211 { NULL, 0, 0, 0, NULL }
2214 static int
2215 dissect_isdn_sup_Call_T_FPHArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2216 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2217 Call_T_FPHArg_sequence, hf_index, ett_isdn_sup_Call_T_FPHArg);
2219 return offset;
2223 static const value_string isdn_sup_PrecLevel_vals[] = {
2224 { 0, "flashOverride" },
2225 { 1, "flash" },
2226 { 2, "immediate" },
2227 { 3, "priority" },
2228 { 4, "routine" },
2229 { 0, NULL }
2233 static int
2234 dissect_isdn_sup_PrecLevel(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2235 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2236 NULL);
2238 return offset;
2242 static const value_string isdn_sup_LFBIndictn_vals[] = {
2243 { 0, "ifbAllowed" },
2244 { 1, "ifbNotAllowed" },
2245 { 2, "pathReserved" },
2246 { 0, NULL }
2250 static int
2251 dissect_isdn_sup_LFBIndictn(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2252 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2253 NULL);
2255 return offset;
2260 static int
2261 dissect_isdn_sup_MLPPSvcDomn(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2262 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
2263 NULL);
2265 return offset;
2269 static const ber_sequence_t MLPPParams_sequence[] = {
2270 { &hf_isdn_sup_precLevel , BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_PrecLevel },
2271 { &hf_isdn_sup_lfbIndictn , BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_LFBIndictn },
2272 { &hf_isdn_sup_mlppSvcDomn, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_MLPPSvcDomn },
2273 { NULL, 0, 0, 0, NULL }
2276 static int
2277 dissect_isdn_sup_MLPPParams(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2278 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2279 MLPPParams_sequence, hf_index, ett_isdn_sup_MLPPParams);
2281 return offset;
2286 static int
2287 dissect_isdn_sup_IEArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2288 offset = dissect_isdn_sup_Q931InformationElement(implicit_tag, tvb, offset, actx, tree, hf_index);
2290 return offset;
2294 static const ber_sequence_t MLPPLFBArg_sequence[] = {
2295 { &hf_isdn_sup_mlppParams , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_MLPPParams },
2296 { &hf_isdn_sup_ieArg , BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_IEArg },
2297 { NULL, 0, 0, 0, NULL }
2300 static int
2301 dissect_isdn_sup_MLPPLFBArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2302 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2303 MLPPLFBArg_sequence, hf_index, ett_isdn_sup_MLPPLFBArg);
2305 return offset;
2309 static const value_string isdn_sup_StatusQuery_vals[] = {
2310 { 1, "success" },
2311 { 2, "failure" },
2312 { 3, "bearerCapabilityNotAuthorized" },
2313 { 4, "bearerCapabilityNotlmplemented" },
2314 { 5, "bearerCapabilityNotAvailable" },
2315 { 6, "pathReservationDenied" },
2316 { 0, NULL }
2320 static int
2321 dissect_isdn_sup_StatusQuery(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2322 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2323 NULL);
2325 return offset;
2330 static int
2331 dissect_isdn_sup_Location(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2332 offset = dissect_isdn_sup_Q931InformationElement(implicit_tag, tvb, offset, actx, tree, hf_index);
2334 return offset;
2338 static const ber_sequence_t MLPPLFBResp_sequence[] = {
2339 { &hf_isdn_sup_statusQuery, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_StatusQuery },
2340 { &hf_isdn_sup_location , BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_Location },
2341 { NULL, 0, 0, 0, NULL }
2344 static int
2345 dissect_isdn_sup_MLPPLFBResp(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2346 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2347 MLPPLFBResp_sequence, hf_index, ett_isdn_sup_MLPPLFBResp);
2349 return offset;
2353 static const value_string isdn_sup_StatusRequest_vals[] = {
2354 { 1, "successCalledUserMLPPSubscriber" },
2355 { 2, "successCalledUserNotMLPPSubscriber" },
2356 { 3, "failureCaseA" },
2357 { 4, "failureCaseB" },
2358 { 0, NULL }
2362 static int
2363 dissect_isdn_sup_StatusRequest(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2364 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2365 NULL);
2367 return offset;
2371 static const value_string isdn_sup_PreemptParams_vals[] = {
2372 { 1, "circuitReservedForReuse" },
2373 { 2, "circuitNotReservedForReuse" },
2374 { 0, NULL }
2378 static int
2379 dissect_isdn_sup_PreemptParams(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2380 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2381 NULL);
2383 return offset;
2386 /*--- PDUs ---*/
2388 static int dissect_ChargingRequestArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2389 int offset = 0;
2390 asn1_ctx_t asn1_ctx;
2391 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2392 offset = dissect_isdn_sup_ChargingRequestArg(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_ChargingRequestArg_PDU);
2393 return offset;
2395 static int dissect_ChargingRequestRes_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2396 int offset = 0;
2397 asn1_ctx_t asn1_ctx;
2398 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2399 offset = dissect_isdn_sup_ChargingRequestRes(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_ChargingRequestRes_PDU);
2400 return offset;
2402 static int dissect_AOCSCurrencyArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2403 int offset = 0;
2404 asn1_ctx_t asn1_ctx;
2405 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2406 offset = dissect_isdn_sup_AOCSCurrencyArg(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_AOCSCurrencyArg_PDU);
2407 return offset;
2409 static int dissect_AOCSSpecialArrArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2410 int offset = 0;
2411 asn1_ctx_t asn1_ctx;
2412 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2413 offset = dissect_isdn_sup_AOCSSpecialArrArg(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_AOCSSpecialArrArg_PDU);
2414 return offset;
2416 static int dissect_AOCDCurrencyArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2417 int offset = 0;
2418 asn1_ctx_t asn1_ctx;
2419 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2420 offset = dissect_isdn_sup_AOCDCurrencyArg(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_AOCDCurrencyArg_PDU);
2421 return offset;
2423 static int dissect_AOCDChargingUnitArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2424 int offset = 0;
2425 asn1_ctx_t asn1_ctx;
2426 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2427 offset = dissect_isdn_sup_AOCDChargingUnitArg(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_AOCDChargingUnitArg_PDU);
2428 return offset;
2430 static int dissect_AOCECurrencyArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2431 int offset = 0;
2432 asn1_ctx_t asn1_ctx;
2433 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2434 offset = dissect_isdn_sup_AOCECurrencyArg(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_AOCECurrencyArg_PDU);
2435 return offset;
2437 static int dissect_AOCEChargingUnitArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2438 int offset = 0;
2439 asn1_ctx_t asn1_ctx;
2440 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2441 offset = dissect_isdn_sup_AOCEChargingUnitArg(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_AOCEChargingUnitArg_PDU);
2442 return offset;
2444 static int dissect_CUGcallArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2445 int offset = 0;
2446 asn1_ctx_t asn1_ctx;
2447 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2448 offset = dissect_isdn_sup_CUGcallArg(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_CUGcallArg_PDU);
2449 return offset;
2451 static int dissect_BeginCONFArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2452 int offset = 0;
2453 asn1_ctx_t asn1_ctx;
2454 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2455 offset = dissect_isdn_sup_BeginCONFArg(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_BeginCONFArg_PDU);
2456 return offset;
2458 static int dissect_BeginCONFRes_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2459 int offset = 0;
2460 asn1_ctx_t asn1_ctx;
2461 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2462 offset = dissect_isdn_sup_BeginCONFRes(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_BeginCONFRes_PDU);
2463 return offset;
2465 static int dissect_AddCONFArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2466 int offset = 0;
2467 asn1_ctx_t asn1_ctx;
2468 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2469 offset = dissect_isdn_sup_AddCONFArg(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_AddCONFArg_PDU);
2470 return offset;
2472 static int dissect_AddCONFRes_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2473 int offset = 0;
2474 asn1_ctx_t asn1_ctx;
2475 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2476 offset = dissect_isdn_sup_AddCONFRes(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_AddCONFRes_PDU);
2477 return offset;
2479 static int dissect_SplitCONFArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2480 int offset = 0;
2481 asn1_ctx_t asn1_ctx;
2482 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2483 offset = dissect_isdn_sup_SplitCONFArg(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_SplitCONFArg_PDU);
2484 return offset;
2486 static int dissect_DropCONFArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2487 int offset = 0;
2488 asn1_ctx_t asn1_ctx;
2489 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2490 offset = dissect_isdn_sup_DropCONFArg(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_DropCONFArg_PDU);
2491 return offset;
2493 static int dissect_IsolateCONFArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2494 int offset = 0;
2495 asn1_ctx_t asn1_ctx;
2496 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2497 offset = dissect_isdn_sup_IsolateCONFArg(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_IsolateCONFArg_PDU);
2498 return offset;
2500 static int dissect_ReattachCONFArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2501 int offset = 0;
2502 asn1_ctx_t asn1_ctx;
2503 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2504 offset = dissect_isdn_sup_ReattachCONFArg(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_ReattachCONFArg_PDU);
2505 return offset;
2507 static int dissect_PartyDISCArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2508 int offset = 0;
2509 asn1_ctx_t asn1_ctx;
2510 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2511 offset = dissect_isdn_sup_PartyDISCArg(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_PartyDISCArg_PDU);
2512 return offset;
2514 static int dissect_ActivationDiversionArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2515 int offset = 0;
2516 asn1_ctx_t asn1_ctx;
2517 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2518 offset = dissect_isdn_sup_ActivationDiversionArg(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_ActivationDiversionArg_PDU);
2519 return offset;
2521 static int dissect_DeactivationDiversionArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2522 int offset = 0;
2523 asn1_ctx_t asn1_ctx;
2524 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2525 offset = dissect_isdn_sup_DeactivationDiversionArg(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_DeactivationDiversionArg_PDU);
2526 return offset;
2528 static int dissect_ActivationStatusNotificationDivArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2529 int offset = 0;
2530 asn1_ctx_t asn1_ctx;
2531 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2532 offset = dissect_isdn_sup_ActivationStatusNotificationDivArg(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_ActivationStatusNotificationDivArg_PDU);
2533 return offset;
2535 static int dissect_DeactivationStatusNotificationDivArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2536 int offset = 0;
2537 asn1_ctx_t asn1_ctx;
2538 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2539 offset = dissect_isdn_sup_DeactivationStatusNotificationDivArg(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_DeactivationStatusNotificationDivArg_PDU);
2540 return offset;
2542 static int dissect_InterrogationDiversionArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2543 int offset = 0;
2544 asn1_ctx_t asn1_ctx;
2545 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2546 offset = dissect_isdn_sup_InterrogationDiversionArg(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_InterrogationDiversionArg_PDU);
2547 return offset;
2549 static int dissect_InterrogationDiversionRes_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2550 int offset = 0;
2551 asn1_ctx_t asn1_ctx;
2552 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2553 offset = dissect_isdn_sup_InterrogationDiversionRes(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_InterrogationDiversionRes_PDU);
2554 return offset;
2556 static int dissect_InterrogateServedUserNumbersRes_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2557 int offset = 0;
2558 asn1_ctx_t asn1_ctx;
2559 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2560 offset = dissect_isdn_sup_InterrogateServedUserNumbersRes(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_InterrogateServedUserNumbersRes_PDU);
2561 return offset;
2563 static int dissect_DiversionInformationArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2564 int offset = 0;
2565 asn1_ctx_t asn1_ctx;
2566 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2567 offset = dissect_isdn_sup_DiversionInformationArg(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_DiversionInformationArg_PDU);
2568 return offset;
2570 static int dissect_CallDeflectionArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2571 int offset = 0;
2572 asn1_ctx_t asn1_ctx;
2573 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2574 offset = dissect_isdn_sup_CallDeflectionArg(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_CallDeflectionArg_PDU);
2575 return offset;
2577 static int dissect_CallRerouteingArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2578 int offset = 0;
2579 asn1_ctx_t asn1_ctx;
2580 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2581 offset = dissect_isdn_sup_CallRerouteingArg(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_CallRerouteingArg_PDU);
2582 return offset;
2584 static int dissect_DivertingLegInformation1Arg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2585 int offset = 0;
2586 asn1_ctx_t asn1_ctx;
2587 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2588 offset = dissect_isdn_sup_DivertingLegInformation1Arg(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_DivertingLegInformation1Arg_PDU);
2589 return offset;
2591 static int dissect_DivertingLegInformation2Arg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2592 int offset = 0;
2593 asn1_ctx_t asn1_ctx;
2594 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2595 offset = dissect_isdn_sup_DivertingLegInformation2Arg(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_DivertingLegInformation2Arg_PDU);
2596 return offset;
2598 static int dissect_DivertingLegInformation3Arg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2599 int offset = 0;
2600 asn1_ctx_t asn1_ctx;
2601 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2602 offset = dissect_isdn_sup_DivertingLegInformation3Arg(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_DivertingLegInformation3Arg_PDU);
2603 return offset;
2605 static int dissect_UserUserServiceArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2606 int offset = 0;
2607 asn1_ctx_t asn1_ctx;
2608 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2609 offset = dissect_isdn_sup_UserUserServiceArg(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_UserUserServiceArg_PDU);
2610 return offset;
2612 static int dissect_CalledFreephoneNrArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2613 int offset = 0;
2614 asn1_ctx_t asn1_ctx;
2615 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2616 offset = dissect_isdn_sup_CalledFreephoneNrArg(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_CalledFreephoneNrArg_PDU);
2617 return offset;
2619 static int dissect_Monitor_T_FPHArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2620 int offset = 0;
2621 asn1_ctx_t asn1_ctx;
2622 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2623 offset = dissect_isdn_sup_Monitor_T_FPHArg(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_Monitor_T_FPHArg_PDU);
2624 return offset;
2626 static int dissect_Free_T_FPHArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2627 int offset = 0;
2628 asn1_ctx_t asn1_ctx;
2629 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2630 offset = dissect_isdn_sup_Free_T_FPHArg(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_Free_T_FPHArg_PDU);
2631 return offset;
2633 static int dissect_Call_T_FPHArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2634 int offset = 0;
2635 asn1_ctx_t asn1_ctx;
2636 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2637 offset = dissect_isdn_sup_Call_T_FPHArg(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_Call_T_FPHArg_PDU);
2638 return offset;
2640 static int dissect_MLPPLFBArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2641 int offset = 0;
2642 asn1_ctx_t asn1_ctx;
2643 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2644 offset = dissect_isdn_sup_MLPPLFBArg(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_MLPPLFBArg_PDU);
2645 return offset;
2647 static int dissect_MLPPLFBResp_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2648 int offset = 0;
2649 asn1_ctx_t asn1_ctx;
2650 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2651 offset = dissect_isdn_sup_MLPPLFBResp(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_MLPPLFBResp_PDU);
2652 return offset;
2654 static int dissect_MLPPParams_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2655 int offset = 0;
2656 asn1_ctx_t asn1_ctx;
2657 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2658 offset = dissect_isdn_sup_MLPPParams(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_MLPPParams_PDU);
2659 return offset;
2661 static int dissect_StatusRequest_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2662 int offset = 0;
2663 asn1_ctx_t asn1_ctx;
2664 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2665 offset = dissect_isdn_sup_StatusRequest(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_StatusRequest_PDU);
2666 return offset;
2668 static int dissect_PreemptParams_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2669 int offset = 0;
2670 asn1_ctx_t asn1_ctx;
2671 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
2672 offset = dissect_isdn_sup_PreemptParams(false, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_PreemptParams_PDU);
2673 return offset;
2677 static const isdn_sup_op_t isdn_sup_op_tab[] = {
2678 /* chargingRequest */ { 30, dissect_ChargingRequestArg_PDU, dissect_ChargingRequestRes_PDU },
2679 /* aOCSCurrency */ { 31, dissect_AOCSCurrencyArg_PDU, NULL },
2680 /* aOCSSpecialArr */ { 32, dissect_AOCSSpecialArrArg_PDU, NULL },
2681 /* aOCDCurrency */ { 33, dissect_AOCDCurrencyArg_PDU, NULL },
2682 /* aOCDChargingUnit */ { 34, dissect_AOCDChargingUnitArg_PDU, NULL },
2683 /* aOCECurrency */ { 35, dissect_AOCECurrencyArg_PDU, NULL },
2684 /* aOCEChargingUnit */ { 36, dissect_AOCEChargingUnitArg_PDU, NULL },
2685 /* cUGcall */ { 2, dissect_CUGcallArg_PDU, NULL },
2686 /* beginCONF */ { 40, dissect_BeginCONFArg_PDU, dissect_BeginCONFRes_PDU },
2687 /* addCONF */ { 41, dissect_AddCONFArg_PDU, dissect_AddCONFRes_PDU },
2688 /* splitCONF */ { 42, dissect_SplitCONFArg_PDU, NULL },
2689 /* dropCONF */ { 43, dissect_DropCONFArg_PDU, NULL },
2690 /* isolateCONF */ { 44, dissect_IsolateCONFArg_PDU, NULL },
2691 /* reattachCONF */ { 45, dissect_ReattachCONFArg_PDU, NULL },
2692 /* partyDISC */ { 46, dissect_PartyDISCArg_PDU, NULL },
2693 /* activationDiversion */ { 7, dissect_ActivationDiversionArg_PDU, NULL },
2694 /* deactivationDiversion */ { 8, dissect_DeactivationDiversionArg_PDU, NULL },
2695 /* activationStatusNotificationDiv */ { 9, dissect_ActivationStatusNotificationDivArg_PDU, NULL },
2696 /* deactivationStatusNotificationDiv */ { 10, dissect_DeactivationStatusNotificationDivArg_PDU, NULL },
2697 /* interrogationDiversion */ { 11, dissect_InterrogationDiversionArg_PDU, dissect_InterrogationDiversionRes_PDU },
2698 /* interrogateServedUserNumbers */ { 17, NULL, dissect_InterrogateServedUserNumbersRes_PDU },
2699 /* diversionInformation */ { 12, dissect_DiversionInformationArg_PDU, NULL },
2700 /* callDeflection */ { 13, dissect_CallDeflectionArg_PDU, NULL },
2701 /* callRerouteing */ { 14, dissect_CallRerouteingArg_PDU, NULL },
2702 /* divertingLegInformation1 */ { 18, dissect_DivertingLegInformation1Arg_PDU, NULL },
2703 /* divertingLegInformation2 */ { 15, dissect_DivertingLegInformation2Arg_PDU, NULL },
2704 /* divertingLegInformation3 */ { 19, dissect_DivertingLegInformation3Arg_PDU, NULL },
2705 /* mCIDRequest */ { 3, NULL, NULL },
2706 /* userUserService */ { 1, dissect_UserUserServiceArg_PDU, NULL },
2707 /* mLPPLFBQuery */ { 24, dissect_MLPPLFBArg_PDU, dissect_MLPPLFBResp_PDU },
2708 /* mLPPCallRequest */ { 25, dissect_MLPPParams_PDU, dissect_StatusRequest_PDU },
2709 /* mLPPCallPreemption */ { 26, dissect_PreemptParams_PDU, NULL },
2713 static const isdn_sup_global_op_t isdn_sup_global_op_tab[] = {
2715 /* callFPH */ { fPHOID".1", dissect_CalledFreephoneNrArg_PDU, NULL },
2716 /* monitor-T-FPH */ { fPHOID".2", dissect_Monitor_T_FPHArg_PDU, NULL },
2717 /* free-T-FPH */ { fPHOID".3", dissect_Free_T_FPHArg_PDU, NULL },
2718 /* call-T-FPH */ { fPHOID".4", dissect_Call_T_FPHArg_PDU, NULL },
2721 static const isdn_sup_err_t isdn_sup_err_tab[] = {
2722 /* notSubscribed */ { 0, NULL },
2723 /* notAvailable */ { 3, NULL },
2724 /* notImplemented */ { 4, NULL },
2725 /* invalidServedUserNr */ { 6, NULL },
2726 /* invalidCallState */ { 7, NULL },
2727 /* basicServiceNotProvided */ { 8, NULL },
2728 /* notIncomingCall */ { 9, NULL },
2729 /* supplementaryServiceInteractionNotAllowed */ { 10, NULL },
2730 /* resourceUnavailable */ { 11, NULL },
2731 /* noChargingInfoAvailable */ { 26, NULL },
2732 /* invalidOrUnregisteredCUGIndex */ { 16, NULL },
2733 /* requestedBasicServiceViolatesCUGConstraints */ { 17, NULL },
2734 /* outgoingCallsBarredWithinCUG */ { 18, NULL },
2735 /* incomingCallsBarredWithinCUG */ { 19, NULL },
2736 /* userNotMemberOfCUG */ { 20, NULL },
2737 /* inconsistencyInDesignatedFacilityAndSubscriberClass */ { 21, NULL },
2738 /* illConferenceId */ { 28, NULL },
2739 /* illPartyId */ { 29, NULL },
2740 /* numberOfPartiesExceeded */ { 30, NULL },
2741 /* notActive */ { 31, NULL },
2742 /* notAllowed */ { 32, NULL },
2743 /* invalidDivertedToNr */ { 12, NULL },
2744 /* specialServiceNr */ { 14, NULL },
2745 /* diversionToServedUserNr */ { 15, NULL },
2746 /* incomingCallAccepted */ { 23, NULL },
2747 /* numberOfDiversionsExceeded */ { 24, NULL },
2748 /* notActivated */ { 46, NULL },
2749 /* requestAlreadyAccepted */ { 48, NULL },
2750 /* rejectedByTheNetwork */ { 1, NULL },
2751 /* rejectedByTheUser */ { 2, NULL },
2752 /* unauthorizedPrecedenceLevel */ { 44, NULL },
2756 static const isdn_sup_op_t *get_op(int32_t opcode) {
2757 int i;
2759 /* search from the end to get the last occurrence if the operation is redefined in some newer specification */
2760 for (i = array_length(isdn_sup_op_tab) - 1; i >= 0; i--)
2761 if (isdn_sup_op_tab[i].opcode == opcode)
2762 return &isdn_sup_op_tab[i];
2763 return NULL;
2766 static const isdn_sup_err_t *get_err(int32_t errcode) {
2767 int i;
2769 /* search from the end to get the last occurrence if the operation is redefined in some newer specification */
2770 for (i = array_length(isdn_sup_err_tab) - 1; i >= 0; i--)
2771 if (isdn_sup_err_tab[i].errcode == errcode)
2772 return &isdn_sup_err_tab[i];
2773 return NULL;
2776 /*--- dissect_isdn_sup_arg ------------------------------------------------------*/
2777 static int
2778 dissect_isdn_sup_arg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) {
2779 int offset = 0;
2780 rose_ctx_t *rctx;
2781 int32_t opcode = 0;
2782 const char *p;
2783 const isdn_sup_op_t *op_ptr;
2784 proto_item *ti;
2785 proto_tree *isdn_sup_tree;
2787 /* Reject the packet if data is NULL */
2788 if (data == NULL)
2789 return 0;
2790 rctx = get_rose_ctx(data);
2791 DISSECTOR_ASSERT(rctx);
2793 if (rctx->d.pdu != 1) /* invoke */
2794 return offset;
2795 if (rctx->d.code == 0) { /* local */
2796 opcode = rctx->d.code_local;
2797 } else {
2798 return offset;
2800 op_ptr = get_op(opcode);
2801 if (!op_ptr)
2802 return offset;
2804 ti = proto_tree_add_item(tree, proto_isdn_sup, tvb, offset, -1, ENC_NA);
2805 isdn_sup_tree = proto_item_add_subtree(ti, ett_isdn_sup);
2807 proto_tree_add_uint(isdn_sup_tree, hf_isdn_sup_operation, tvb, 0, 0, opcode);
2808 p = try_val_to_str(opcode, VALS(isdn_sup_str_operation));
2809 if (p) {
2810 proto_item_append_text(ti, ": %s", p);
2811 proto_item_append_text(rctx->d.code_item, " - %s", p);
2812 if (rctx->apdu_depth >= 0)
2813 proto_item_append_text(proto_item_get_parent_nth(proto_tree_get_parent(tree), rctx->apdu_depth), " %s", p);
2816 if (op_ptr->arg_pdu)
2817 offset = op_ptr->arg_pdu(tvb, pinfo, isdn_sup_tree, NULL);
2818 else
2819 if (tvb_reported_length_remaining(tvb, offset) > 0) {
2820 proto_tree_add_expert(tree, pinfo, &ei_isdn_sup_unsupported_error_type, tvb, offset, -1);
2821 offset += tvb_reported_length_remaining(tvb, offset);
2824 return offset;
2827 /*--- dissect_isdn_sup_res -------------------------------------------------------*/
2828 static int
2829 dissect_isdn_sup_res(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) {
2830 int offset = 0;
2831 rose_ctx_t *rctx;
2832 int32_t opcode = 0;
2833 const char *p;
2834 const isdn_sup_op_t *op_ptr;
2835 proto_item *ti;
2836 proto_tree *isdn_sup_tree;
2838 /* Reject the packet if data is NULL */
2839 if (data == NULL)
2840 return 0;
2841 rctx = get_rose_ctx(data);
2842 DISSECTOR_ASSERT(rctx);
2844 if (rctx->d.pdu != 2) /* returnResult */
2845 return offset;
2846 if (rctx->d.code != 0) /* local */
2847 return offset;
2848 opcode = rctx->d.code_local;
2849 op_ptr = get_op(opcode);
2850 if (!op_ptr)
2851 return offset;
2853 ti = proto_tree_add_item(tree, proto_isdn_sup, tvb, offset, -1, ENC_NA);
2854 isdn_sup_tree = proto_item_add_subtree(ti, ett_isdn_sup);
2856 proto_tree_add_uint(isdn_sup_tree, hf_isdn_sup_operation, tvb, 0, 0, opcode);
2857 p = try_val_to_str(opcode, VALS(isdn_sup_str_operation));
2858 if (p) {
2859 proto_item_append_text(ti, ": %s", p);
2860 proto_item_append_text(rctx->d.code_item, " - %s", p);
2861 if (rctx->apdu_depth >= 0)
2862 proto_item_append_text(proto_item_get_parent_nth(proto_tree_get_parent(tree), rctx->apdu_depth), " %s", p);
2865 if (op_ptr->res_pdu)
2866 offset = op_ptr->res_pdu(tvb, pinfo, isdn_sup_tree, NULL);
2867 else
2868 if (tvb_reported_length_remaining(tvb, offset) > 0) {
2869 proto_tree_add_expert(tree, pinfo, &ei_isdn_sup_unsupported_result_type, tvb, offset, -1);
2870 offset += tvb_reported_length_remaining(tvb, offset);
2873 return offset;
2877 /*--- dissect_isdn_sup_err ------------------------------------------------------*/
2878 static int
2879 dissect_isdn_sup_err(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) {
2880 int offset = 0;
2881 rose_ctx_t *rctx;
2882 int32_t errcode;
2883 const isdn_sup_err_t *err_ptr;
2884 const char *p;
2885 proto_item *ti;
2886 proto_tree *isdn_sup_tree;
2888 /* Reject the packet if data is NULL */
2889 if (data == NULL)
2890 return 0;
2891 rctx = get_rose_ctx(data);
2892 DISSECTOR_ASSERT(rctx);
2894 if (rctx->d.pdu != 3) /* returnError */
2895 return offset;
2896 if (rctx->d.code != 0) /* local */
2897 return offset;
2898 errcode = rctx->d.code_local;
2899 err_ptr = get_err(errcode);
2900 if (!err_ptr)
2901 return offset;
2903 ti = proto_tree_add_item(tree, proto_isdn_sup, tvb, offset, -1, ENC_NA);
2904 isdn_sup_tree = proto_item_add_subtree(ti, ett_isdn_sup);
2906 proto_tree_add_uint(isdn_sup_tree, hf_isdn_sup_error, tvb, 0, 0, errcode);
2907 p = try_val_to_str(errcode, VALS(isdn_sup_str_error));
2908 if (p) {
2909 proto_item_append_text(ti, ": %s", p);
2910 proto_item_append_text(rctx->d.code_item, " - %s", p);
2911 if (rctx->apdu_depth >= 0)
2912 proto_item_append_text(proto_item_get_parent_nth(proto_tree_get_parent(tree), rctx->apdu_depth), " %s", p);
2915 if (err_ptr->err_pdu)
2916 offset = err_ptr->err_pdu(tvb, pinfo, isdn_sup_tree, NULL);
2917 else
2918 if (tvb_reported_length_remaining(tvb, offset) > 0) {
2919 proto_tree_add_expert(tree, pinfo, &ei_isdn_sup_unsupported_error_type, tvb, offset, -1);
2920 offset += tvb_reported_length_remaining(tvb, offset);
2923 return offset;
2927 /*--- proto_reg_handoff_isdn_sup ---------------------------------------*/
2929 void proto_reg_handoff_isdn_sup(void) {
2930 int i;
2931 #if 0
2932 dissector_handle_t q931_handle;
2933 q931_handle = find_dissector("q931");
2934 #endif
2936 for (i=0; i<(int)array_length(isdn_sup_op_tab); i++) {
2937 dissector_add_uint("q932.ros.etsi.local.arg", isdn_sup_op_tab[i].opcode, isdn_sup_arg_handle);
2938 dissector_add_uint("q932.ros.etsi.local.res", isdn_sup_op_tab[i].opcode, isdn_sup_res_handle);
2941 for (i=0; i<(int)array_length(isdn_sup_global_op_tab); i++) {
2942 if(isdn_sup_global_op_tab[i].arg_pdu)
2943 dissector_add_string("q932.ros.global.arg", isdn_sup_global_op_tab[i].oid, create_dissector_handle(isdn_sup_global_op_tab[i].arg_pdu, proto_isdn_sup));
2944 if(isdn_sup_global_op_tab[i].res_pdu)
2945 dissector_add_string("q932.ros.global.res", isdn_sup_global_op_tab[i].oid, create_dissector_handle(isdn_sup_global_op_tab[i].res_pdu, proto_isdn_sup));
2948 for (i=0; i<(int)array_length(isdn_sup_err_tab); i++) {
2949 dissector_add_uint("q932.ros.etsi.local.err", isdn_sup_err_tab[i].errcode, isdn_sup_err_handle);
2955 void proto_register_isdn_sup(void) {
2957 /* List of fields */
2958 static hf_register_info hf[] = {
2959 { &hf_isdn_sup,
2960 { "isdn_sup", "isdn_sup.1",
2961 FT_INT32, BASE_DEC, NULL, 0,
2962 NULL, HFILL }
2964 { &hf_isdn_sup_operation,
2965 { "Operation", "isdn_sup.operation",
2966 FT_UINT8, BASE_DEC, VALS(isdn_sup_str_operation), 0x0,
2967 NULL, HFILL }
2969 { &hf_isdn_sup_error,
2970 { "Error", "isdn_sup.error",
2971 FT_UINT8, BASE_DEC, VALS(isdn_sup_str_error), 0x0,
2972 NULL, HFILL }
2975 { &hf_isdn_sup_ChargingRequestArg_PDU,
2976 { "ChargingRequestArg", "isdn-sup.ChargingRequestArg",
2977 FT_UINT32, BASE_DEC, VALS(isdn_sup_ChargingCase_vals), 0,
2978 NULL, HFILL }},
2979 { &hf_isdn_sup_ChargingRequestRes_PDU,
2980 { "ChargingRequestRes", "isdn-sup.ChargingRequestRes",
2981 FT_UINT32, BASE_DEC, VALS(isdn_sup_ChargingRequestRes_vals), 0,
2982 NULL, HFILL }},
2983 { &hf_isdn_sup_AOCSCurrencyArg_PDU,
2984 { "AOCSCurrencyArg", "isdn-sup.AOCSCurrencyArg",
2985 FT_UINT32, BASE_DEC, VALS(isdn_sup_AOCSCurrencyArg_vals), 0,
2986 NULL, HFILL }},
2987 { &hf_isdn_sup_AOCSSpecialArrArg_PDU,
2988 { "AOCSSpecialArrArg", "isdn-sup.AOCSSpecialArrArg",
2989 FT_UINT32, BASE_DEC, VALS(isdn_sup_AOCSSpecialArrArg_vals), 0,
2990 NULL, HFILL }},
2991 { &hf_isdn_sup_AOCDCurrencyArg_PDU,
2992 { "AOCDCurrencyArg", "isdn-sup.AOCDCurrencyArg",
2993 FT_UINT32, BASE_DEC, VALS(isdn_sup_AOCDCurrencyArg_vals), 0,
2994 NULL, HFILL }},
2995 { &hf_isdn_sup_AOCDChargingUnitArg_PDU,
2996 { "AOCDChargingUnitArg", "isdn-sup.AOCDChargingUnitArg",
2997 FT_UINT32, BASE_DEC, VALS(isdn_sup_AOCDChargingUnitArg_vals), 0,
2998 NULL, HFILL }},
2999 { &hf_isdn_sup_AOCECurrencyArg_PDU,
3000 { "AOCECurrencyArg", "isdn-sup.AOCECurrencyArg",
3001 FT_UINT32, BASE_DEC, VALS(isdn_sup_AOCECurrencyArg_vals), 0,
3002 NULL, HFILL }},
3003 { &hf_isdn_sup_AOCEChargingUnitArg_PDU,
3004 { "AOCEChargingUnitArg", "isdn-sup.AOCEChargingUnitArg",
3005 FT_UINT32, BASE_DEC, VALS(isdn_sup_AOCEChargingUnitArg_vals), 0,
3006 NULL, HFILL }},
3007 { &hf_isdn_sup_CUGcallArg_PDU,
3008 { "CUGcallArg", "isdn-sup.CUGcallArg_element",
3009 FT_NONE, BASE_NONE, NULL, 0,
3010 NULL, HFILL }},
3011 { &hf_isdn_sup_BeginCONFArg_PDU,
3012 { "BeginCONFArg", "isdn-sup.BeginCONFArg",
3013 FT_UINT32, BASE_DEC, NULL, 0,
3014 NULL, HFILL }},
3015 { &hf_isdn_sup_BeginCONFRes_PDU,
3016 { "BeginCONFRes", "isdn-sup.BeginCONFRes_element",
3017 FT_NONE, BASE_NONE, NULL, 0,
3018 NULL, HFILL }},
3019 { &hf_isdn_sup_AddCONFArg_PDU,
3020 { "AddCONFArg", "isdn-sup.AddCONFArg",
3021 FT_UINT32, BASE_DEC, NULL, 0,
3022 NULL, HFILL }},
3023 { &hf_isdn_sup_AddCONFRes_PDU,
3024 { "AddCONFRes", "isdn-sup.AddCONFRes",
3025 FT_UINT32, BASE_DEC, NULL, 0,
3026 NULL, HFILL }},
3027 { &hf_isdn_sup_SplitCONFArg_PDU,
3028 { "SplitCONFArg", "isdn-sup.SplitCONFArg_element",
3029 FT_NONE, BASE_NONE, NULL, 0,
3030 NULL, HFILL }},
3031 { &hf_isdn_sup_DropCONFArg_PDU,
3032 { "DropCONFArg", "isdn-sup.DropCONFArg",
3033 FT_UINT32, BASE_DEC, NULL, 0,
3034 NULL, HFILL }},
3035 { &hf_isdn_sup_IsolateCONFArg_PDU,
3036 { "IsolateCONFArg", "isdn-sup.IsolateCONFArg",
3037 FT_UINT32, BASE_DEC, NULL, 0,
3038 NULL, HFILL }},
3039 { &hf_isdn_sup_ReattachCONFArg_PDU,
3040 { "ReattachCONFArg", "isdn-sup.ReattachCONFArg",
3041 FT_UINT32, BASE_DEC, NULL, 0,
3042 NULL, HFILL }},
3043 { &hf_isdn_sup_PartyDISCArg_PDU,
3044 { "PartyDISCArg", "isdn-sup.PartyDISCArg",
3045 FT_UINT32, BASE_DEC, NULL, 0,
3046 NULL, HFILL }},
3047 { &hf_isdn_sup_ActivationDiversionArg_PDU,
3048 { "ActivationDiversionArg", "isdn-sup.ActivationDiversionArg_element",
3049 FT_NONE, BASE_NONE, NULL, 0,
3050 NULL, HFILL }},
3051 { &hf_isdn_sup_DeactivationDiversionArg_PDU,
3052 { "DeactivationDiversionArg", "isdn-sup.DeactivationDiversionArg_element",
3053 FT_NONE, BASE_NONE, NULL, 0,
3054 NULL, HFILL }},
3055 { &hf_isdn_sup_ActivationStatusNotificationDivArg_PDU,
3056 { "ActivationStatusNotificationDivArg", "isdn-sup.ActivationStatusNotificationDivArg_element",
3057 FT_NONE, BASE_NONE, NULL, 0,
3058 NULL, HFILL }},
3059 { &hf_isdn_sup_DeactivationStatusNotificationDivArg_PDU,
3060 { "DeactivationStatusNotificationDivArg", "isdn-sup.DeactivationStatusNotificationDivArg_element",
3061 FT_NONE, BASE_NONE, NULL, 0,
3062 NULL, HFILL }},
3063 { &hf_isdn_sup_InterrogationDiversionArg_PDU,
3064 { "InterrogationDiversionArg", "isdn-sup.InterrogationDiversionArg_element",
3065 FT_NONE, BASE_NONE, NULL, 0,
3066 NULL, HFILL }},
3067 { &hf_isdn_sup_InterrogationDiversionRes_PDU,
3068 { "InterrogationDiversionRes", "isdn-sup.InterrogationDiversionRes",
3069 FT_UINT32, BASE_DEC, NULL, 0,
3070 NULL, HFILL }},
3071 { &hf_isdn_sup_InterrogateServedUserNumbersRes_PDU,
3072 { "InterrogateServedUserNumbersRes", "isdn-sup.InterrogateServedUserNumbersRes",
3073 FT_UINT32, BASE_DEC, NULL, 0,
3074 NULL, HFILL }},
3075 { &hf_isdn_sup_DiversionInformationArg_PDU,
3076 { "DiversionInformationArg", "isdn-sup.DiversionInformationArg_element",
3077 FT_NONE, BASE_NONE, NULL, 0,
3078 NULL, HFILL }},
3079 { &hf_isdn_sup_CallDeflectionArg_PDU,
3080 { "CallDeflectionArg", "isdn-sup.CallDeflectionArg_element",
3081 FT_NONE, BASE_NONE, NULL, 0,
3082 NULL, HFILL }},
3083 { &hf_isdn_sup_CallRerouteingArg_PDU,
3084 { "CallRerouteingArg", "isdn-sup.CallRerouteingArg_element",
3085 FT_NONE, BASE_NONE, NULL, 0,
3086 NULL, HFILL }},
3087 { &hf_isdn_sup_DivertingLegInformation1Arg_PDU,
3088 { "DivertingLegInformation1Arg", "isdn-sup.DivertingLegInformation1Arg_element",
3089 FT_NONE, BASE_NONE, NULL, 0,
3090 NULL, HFILL }},
3091 { &hf_isdn_sup_DivertingLegInformation2Arg_PDU,
3092 { "DivertingLegInformation2Arg", "isdn-sup.DivertingLegInformation2Arg_element",
3093 FT_NONE, BASE_NONE, NULL, 0,
3094 NULL, HFILL }},
3095 { &hf_isdn_sup_DivertingLegInformation3Arg_PDU,
3096 { "DivertingLegInformation3Arg", "isdn-sup.DivertingLegInformation3Arg",
3097 FT_BOOLEAN, BASE_NONE, NULL, 0,
3098 NULL, HFILL }},
3099 { &hf_isdn_sup_UserUserServiceArg_PDU,
3100 { "UserUserServiceArg", "isdn-sup.UserUserServiceArg_element",
3101 FT_NONE, BASE_NONE, NULL, 0,
3102 NULL, HFILL }},
3103 { &hf_isdn_sup_CalledFreephoneNrArg_PDU,
3104 { "CalledFreephoneNrArg", "isdn-sup.CalledFreephoneNrArg",
3105 FT_UINT32, BASE_DEC, VALS(isdn_sup_PartyNumber_vals), 0,
3106 NULL, HFILL }},
3107 { &hf_isdn_sup_Monitor_T_FPHArg_PDU,
3108 { "Monitor-T-FPHArg", "isdn-sup.Monitor_T_FPHArg_element",
3109 FT_NONE, BASE_NONE, NULL, 0,
3110 NULL, HFILL }},
3111 { &hf_isdn_sup_Free_T_FPHArg_PDU,
3112 { "Free-T-FPHArg", "isdn-sup.Free_T_FPHArg_element",
3113 FT_NONE, BASE_NONE, NULL, 0,
3114 NULL, HFILL }},
3115 { &hf_isdn_sup_Call_T_FPHArg_PDU,
3116 { "Call-T-FPHArg", "isdn-sup.Call_T_FPHArg_element",
3117 FT_NONE, BASE_NONE, NULL, 0,
3118 NULL, HFILL }},
3119 { &hf_isdn_sup_MLPPLFBArg_PDU,
3120 { "MLPPLFBArg", "isdn-sup.MLPPLFBArg_element",
3121 FT_NONE, BASE_NONE, NULL, 0,
3122 NULL, HFILL }},
3123 { &hf_isdn_sup_MLPPLFBResp_PDU,
3124 { "MLPPLFBResp", "isdn-sup.MLPPLFBResp_element",
3125 FT_NONE, BASE_NONE, NULL, 0,
3126 NULL, HFILL }},
3127 { &hf_isdn_sup_MLPPParams_PDU,
3128 { "MLPPParams", "isdn-sup.MLPPParams_element",
3129 FT_NONE, BASE_NONE, NULL, 0,
3130 NULL, HFILL }},
3131 { &hf_isdn_sup_StatusRequest_PDU,
3132 { "StatusRequest", "isdn-sup.StatusRequest",
3133 FT_UINT32, BASE_DEC, VALS(isdn_sup_StatusRequest_vals), 0,
3134 NULL, HFILL }},
3135 { &hf_isdn_sup_PreemptParams_PDU,
3136 { "PreemptParams", "isdn-sup.PreemptParams",
3137 FT_UINT32, BASE_DEC, VALS(isdn_sup_PreemptParams_vals), 0,
3138 NULL, HFILL }},
3139 { &hf_isdn_sup_presentationallowedaddressscreened,
3140 { "presentationAllowedAddress", "isdn-sup.presentationallowedaddressscreened_element",
3141 FT_NONE, BASE_NONE, NULL, 0,
3142 "AddressScreened", HFILL }},
3143 { &hf_isdn_sup_presentationRestricted,
3144 { "presentationRestricted", "isdn-sup.presentationRestricted_element",
3145 FT_NONE, BASE_NONE, NULL, 0,
3146 NULL, HFILL }},
3147 { &hf_isdn_sup_numberNotAvailableDueToInterworking,
3148 { "numberNotAvailableDueToInterworking", "isdn-sup.numberNotAvailableDueToInterworking_element",
3149 FT_NONE, BASE_NONE, NULL, 0,
3150 NULL, HFILL }},
3151 { &hf_isdn_sup_presentationrestrictedaddressscreened,
3152 { "presentationRestrictedAddress", "isdn-sup.presentationrestrictedaddressscreened_element",
3153 FT_NONE, BASE_NONE, NULL, 0,
3154 "AddressScreened", HFILL }},
3155 { &hf_isdn_sup_presentationAllowedAddress,
3156 { "presentationAllowedAddress", "isdn-sup.presentationAllowedAddress_element",
3157 FT_NONE, BASE_NONE, NULL, 0,
3158 "Address", HFILL }},
3159 { &hf_isdn_sup_presentationRestrictedAddress,
3160 { "presentationRestrictedAddress", "isdn-sup.presentationRestrictedAddress_element",
3161 FT_NONE, BASE_NONE, NULL, 0,
3162 "Address", HFILL }},
3163 { &hf_isdn_sup_presentationallowednumberscreened,
3164 { "presentationAllowedNumber", "isdn-sup.presentationallowednumberscreened_element",
3165 FT_NONE, BASE_NONE, NULL, 0,
3166 "NumberScreened", HFILL }},
3167 { &hf_isdn_sup_presentationrestrictednumberscreened,
3168 { "presentationRestrictedNumber", "isdn-sup.presentationrestrictednumberscreened_element",
3169 FT_NONE, BASE_NONE, NULL, 0,
3170 "NumberScreened", HFILL }},
3171 { &hf_isdn_sup_presentationAllowedNumber,
3172 { "presentationAllowedNumber", "isdn-sup.presentationAllowedNumber",
3173 FT_UINT32, BASE_DEC, VALS(isdn_sup_PartyNumber_vals), 0,
3174 "PartyNumber", HFILL }},
3175 { &hf_isdn_sup_presentationRestrictedNumber,
3176 { "presentationRestrictedNumber", "isdn-sup.presentationRestrictedNumber",
3177 FT_UINT32, BASE_DEC, VALS(isdn_sup_PartyNumber_vals), 0,
3178 "PartyNumber", HFILL }},
3179 { &hf_isdn_sup_partyNumber,
3180 { "partyNumber", "isdn-sup.partyNumber",
3181 FT_UINT32, BASE_DEC, VALS(isdn_sup_PartyNumber_vals), 0,
3182 NULL, HFILL }},
3183 { &hf_isdn_sup_screeningIndicator,
3184 { "screeningIndicator", "isdn-sup.screeningIndicator",
3185 FT_UINT32, BASE_DEC, VALS(isdn_sup_ScreeningIndicator_vals), 0,
3186 NULL, HFILL }},
3187 { &hf_isdn_sup_partySubaddress,
3188 { "partySubaddress", "isdn-sup.partySubaddress",
3189 FT_UINT32, BASE_DEC, VALS(isdn_sup_PartySubaddress_vals), 0,
3190 NULL, HFILL }},
3191 { &hf_isdn_sup_unknownPartyNumber,
3192 { "unknownPartyNumber", "isdn-sup.unknownPartyNumber",
3193 FT_STRING, BASE_NONE, NULL, 0,
3194 "NumberDigits", HFILL }},
3195 { &hf_isdn_sup_publicPartyNumber,
3196 { "publicPartyNumber", "isdn-sup.publicPartyNumber_element",
3197 FT_NONE, BASE_NONE, NULL, 0,
3198 NULL, HFILL }},
3199 { &hf_isdn_sup_nsapEncodedNumber,
3200 { "nsapEncodedNumber", "isdn-sup.nsapEncodedNumber",
3201 FT_BYTES, BASE_NONE, NULL, 0,
3202 NULL, HFILL }},
3203 { &hf_isdn_sup_dataPartyNumber,
3204 { "dataPartyNumber", "isdn-sup.dataPartyNumber",
3205 FT_STRING, BASE_NONE, NULL, 0,
3206 "NumberDigits", HFILL }},
3207 { &hf_isdn_sup_telexPartyNumber,
3208 { "telexPartyNumber", "isdn-sup.telexPartyNumber",
3209 FT_STRING, BASE_NONE, NULL, 0,
3210 "NumberDigits", HFILL }},
3211 { &hf_isdn_sup_privatePartyNumber,
3212 { "privatePartyNumber", "isdn-sup.privatePartyNumber_element",
3213 FT_NONE, BASE_NONE, NULL, 0,
3214 NULL, HFILL }},
3215 { &hf_isdn_sup_nationalStandardPartyNumber,
3216 { "nationalStandardPartyNumber", "isdn-sup.nationalStandardPartyNumber",
3217 FT_STRING, BASE_NONE, NULL, 0,
3218 "NumberDigits", HFILL }},
3219 { &hf_isdn_sup_publicTypeOfNumber,
3220 { "publicTypeOfNumber", "isdn-sup.publicTypeOfNumber",
3221 FT_UINT32, BASE_DEC, VALS(isdn_sup_PublicTypeOfNumber_vals), 0,
3222 NULL, HFILL }},
3223 { &hf_isdn_sup_publicNumberDigits,
3224 { "publicNumberDigits", "isdn-sup.publicNumberDigits",
3225 FT_STRING, BASE_NONE, NULL, 0,
3226 "NumberDigits", HFILL }},
3227 { &hf_isdn_sup_privateTypeOfNumber,
3228 { "privateTypeOfNumber", "isdn-sup.privateTypeOfNumber",
3229 FT_UINT32, BASE_DEC, VALS(isdn_sup_PrivateTypeOfNumber_vals), 0,
3230 NULL, HFILL }},
3231 { &hf_isdn_sup_privateNumberDigits,
3232 { "privateNumberDigits", "isdn-sup.privateNumberDigits",
3233 FT_STRING, BASE_NONE, NULL, 0,
3234 "NumberDigits", HFILL }},
3235 { &hf_isdn_sup_userSpecifiedSubaddress,
3236 { "userSpecifiedSubaddress", "isdn-sup.userSpecifiedSubaddress_element",
3237 FT_NONE, BASE_NONE, NULL, 0,
3238 NULL, HFILL }},
3239 { &hf_isdn_sup_nSAPSubaddress,
3240 { "nSAPSubaddress", "isdn-sup.nSAPSubaddress",
3241 FT_BYTES, BASE_NONE, NULL, 0,
3242 NULL, HFILL }},
3243 { &hf_isdn_sup_subaddressInformation,
3244 { "subaddressInformation", "isdn-sup.subaddressInformation",
3245 FT_BYTES, BASE_NONE, NULL, 0,
3246 NULL, HFILL }},
3247 { &hf_isdn_sup_oddCountIndicator,
3248 { "oddCountIndicator", "isdn-sup.oddCountIndicator",
3249 FT_BOOLEAN, BASE_NONE, NULL, 0,
3250 "BOOLEAN", HFILL }},
3251 { &hf_isdn_sup_aOCSCurrencyInfoList,
3252 { "aOCSCurrencyInfoList", "isdn-sup.aOCSCurrencyInfoList",
3253 FT_UINT32, BASE_DEC, NULL, 0,
3254 NULL, HFILL }},
3255 { &hf_isdn_sup_aOCSSpecialArrInfo,
3256 { "aOCSSpecialArrInfo", "isdn-sup.aOCSSpecialArrInfo",
3257 FT_UINT32, BASE_DEC, NULL, 0,
3258 NULL, HFILL }},
3259 { &hf_isdn_sup_chargingInfoFollows,
3260 { "chargingInfoFollows", "isdn-sup.chargingInfoFollows_element",
3261 FT_NONE, BASE_NONE, NULL, 0,
3262 NULL, HFILL }},
3263 { &hf_isdn_sup_chargeNotAvailable,
3264 { "chargeNotAvailable", "isdn-sup.chargeNotAvailable_element",
3265 FT_NONE, BASE_NONE, NULL, 0,
3266 NULL, HFILL }},
3267 { &hf_isdn_sup_aOCDCurrencyInfo,
3268 { "aOCDCurrencyInfo", "isdn-sup.aOCDCurrencyInfo",
3269 FT_UINT32, BASE_DEC, VALS(isdn_sup_AOCDCurrencyInfo_vals), 0,
3270 NULL, HFILL }},
3271 { &hf_isdn_sup_aOCDChargingUnitInfo,
3272 { "aOCDChargingUnitInfo", "isdn-sup.aOCDChargingUnitInfo",
3273 FT_UINT32, BASE_DEC, VALS(isdn_sup_AOCDChargingUnitInfo_vals), 0,
3274 NULL, HFILL }},
3275 { &hf_isdn_sup_aOCECurrencyInfo,
3276 { "aOCECurrencyInfo", "isdn-sup.aOCECurrencyInfo_element",
3277 FT_NONE, BASE_NONE, NULL, 0,
3278 NULL, HFILL }},
3279 { &hf_isdn_sup_aOCEChargingUnitInfo,
3280 { "aOCEChargingUnitInfo", "isdn-sup.aOCEChargingUnitInfo_element",
3281 FT_NONE, BASE_NONE, NULL, 0,
3282 NULL, HFILL }},
3283 { &hf_isdn_sup_AOCSCurrencyInfoList_item,
3284 { "AOCSCurrencyInfo", "isdn-sup.AOCSCurrencyInfo_element",
3285 FT_NONE, BASE_NONE, NULL, 0,
3286 NULL, HFILL }},
3287 { &hf_isdn_sup_chargedItem,
3288 { "chargedItem", "isdn-sup.chargedItem",
3289 FT_UINT32, BASE_DEC, VALS(isdn_sup_ChargedItem_vals), 0,
3290 NULL, HFILL }},
3291 { &hf_isdn_sup_chargingtype,
3292 { "chargingtype", "isdn-sup.chargingtype",
3293 FT_UINT32, BASE_DEC, VALS(isdn_sup_T_chargingtype_vals), 0,
3294 NULL, HFILL }},
3295 { &hf_isdn_sup_aocschargingtypespecificCurrency,
3296 { "specificCurrency", "isdn-sup.aocschargingtypespecificCurrency",
3297 FT_UINT32, BASE_DEC, VALS(isdn_sup_AOCSChargingTypeSpecificCurrency_vals), 0,
3298 "AOCSChargingTypeSpecificCurrency", HFILL }},
3299 { &hf_isdn_sup_durationCurrency,
3300 { "durationCurrency", "isdn-sup.durationCurrency_element",
3301 FT_NONE, BASE_NONE, NULL, 0,
3302 NULL, HFILL }},
3303 { &hf_isdn_sup_flatRateCurrency,
3304 { "flatRateCurrency", "isdn-sup.flatRateCurrency_element",
3305 FT_NONE, BASE_NONE, NULL, 0,
3306 NULL, HFILL }},
3307 { &hf_isdn_sup_volumeRateCurrency,
3308 { "volumeRateCurrency", "isdn-sup.volumeRateCurrency_element",
3309 FT_NONE, BASE_NONE, NULL, 0,
3310 NULL, HFILL }},
3311 { &hf_isdn_sup_specialChargingCode,
3312 { "specialChargingCode", "isdn-sup.specialChargingCode",
3313 FT_UINT32, BASE_DEC, NULL, 0,
3314 NULL, HFILL }},
3315 { &hf_isdn_sup_freeOfCharge,
3316 { "freeOfCharge", "isdn-sup.freeOfCharge_element",
3317 FT_NONE, BASE_NONE, NULL, 0,
3318 NULL, HFILL }},
3319 { &hf_isdn_sup_currencyInfoNotAvailable,
3320 { "currencyInfoNotAvailable", "isdn-sup.currencyInfoNotAvailable_element",
3321 FT_NONE, BASE_NONE, NULL, 0,
3322 NULL, HFILL }},
3323 { &hf_isdn_sup_dCurrency,
3324 { "dCurrency", "isdn-sup.dCurrency",
3325 FT_STRING, BASE_NONE, NULL, 0,
3326 "Currency", HFILL }},
3327 { &hf_isdn_sup_dAmount,
3328 { "dAmount", "isdn-sup.dAmount_element",
3329 FT_NONE, BASE_NONE, NULL, 0,
3330 "Amount", HFILL }},
3331 { &hf_isdn_sup_dChargingType,
3332 { "dChargingType", "isdn-sup.dChargingType",
3333 FT_UINT32, BASE_DEC, VALS(isdn_sup_ChargingType_vals), 0,
3334 "ChargingType", HFILL }},
3335 { &hf_isdn_sup_dTime,
3336 { "dTime", "isdn-sup.dTime_element",
3337 FT_NONE, BASE_NONE, NULL, 0,
3338 "Time", HFILL }},
3339 { &hf_isdn_sup_dGranularity,
3340 { "dGranularity", "isdn-sup.dGranularity_element",
3341 FT_NONE, BASE_NONE, NULL, 0,
3342 "Time", HFILL }},
3343 { &hf_isdn_sup_fRCurrency,
3344 { "fRCurrency", "isdn-sup.fRCurrency",
3345 FT_STRING, BASE_NONE, NULL, 0,
3346 "Currency", HFILL }},
3347 { &hf_isdn_sup_fRAmount,
3348 { "fRAmount", "isdn-sup.fRAmount_element",
3349 FT_NONE, BASE_NONE, NULL, 0,
3350 "Amount", HFILL }},
3351 { &hf_isdn_sup_vRCurrency,
3352 { "vRCurrency", "isdn-sup.vRCurrency",
3353 FT_STRING, BASE_NONE, NULL, 0,
3354 "Currency", HFILL }},
3355 { &hf_isdn_sup_vRAmount,
3356 { "vRAmount", "isdn-sup.vRAmount_element",
3357 FT_NONE, BASE_NONE, NULL, 0,
3358 "Amount", HFILL }},
3359 { &hf_isdn_sup_vRVolumeUnit,
3360 { "vRVolumeUnit", "isdn-sup.vRVolumeUnit",
3361 FT_UINT32, BASE_DEC, VALS(isdn_sup_VolumeUnit_vals), 0,
3362 "VolumeUnit", HFILL }},
3363 { &hf_isdn_sup_aocdspecificCurrency,
3364 { "specificCurrency", "isdn-sup.aocdspecificCurrency_element",
3365 FT_NONE, BASE_NONE, NULL, 0,
3366 "AOCDSpecificCurrency", HFILL }},
3367 { &hf_isdn_sup_recordedCurrency,
3368 { "recordedCurrency", "isdn-sup.recordedCurrency_element",
3369 FT_NONE, BASE_NONE, NULL, 0,
3370 NULL, HFILL }},
3371 { &hf_isdn_sup_typeOfChargingInfo,
3372 { "typeOfChargingInfo", "isdn-sup.typeOfChargingInfo",
3373 FT_UINT32, BASE_DEC, VALS(isdn_sup_TypeOfChargingInfo_vals), 0,
3374 NULL, HFILL }},
3375 { &hf_isdn_sup_aOCDBillingId,
3376 { "aOCDBillingId", "isdn-sup.aOCDBillingId",
3377 FT_UINT32, BASE_DEC, VALS(isdn_sup_AOCDBillingId_vals), 0,
3378 NULL, HFILL }},
3379 { &hf_isdn_sup_aocdspecificchargingunits,
3380 { "specificChargingUnits", "isdn-sup.aocdspecificchargingunits_element",
3381 FT_NONE, BASE_NONE, NULL, 0,
3382 "AOCDSpecificChargingUnits", HFILL }},
3383 { &hf_isdn_sup_recordedUnitsList,
3384 { "recordedUnitsList", "isdn-sup.recordedUnitsList",
3385 FT_UINT32, BASE_DEC, NULL, 0,
3386 NULL, HFILL }},
3387 { &hf_isdn_sup_rCurrency,
3388 { "rCurrency", "isdn-sup.rCurrency",
3389 FT_STRING, BASE_NONE, NULL, 0,
3390 "Currency", HFILL }},
3391 { &hf_isdn_sup_rAmount,
3392 { "rAmount", "isdn-sup.rAmount_element",
3393 FT_NONE, BASE_NONE, NULL, 0,
3394 "Amount", HFILL }},
3395 { &hf_isdn_sup_RecordedUnitsList_item,
3396 { "RecordedUnits", "isdn-sup.RecordedUnits_element",
3397 FT_NONE, BASE_NONE, NULL, 0,
3398 NULL, HFILL }},
3399 { &hf_isdn_sup_recoredunitscc,
3400 { "cc", "isdn-sup.recoredunitscc",
3401 FT_UINT32, BASE_DEC, VALS(isdn_sup_RecoredUnitsCc_vals), 0,
3402 "RecoredUnitsCc", HFILL }},
3403 { &hf_isdn_sup_recordedNumberOfUnits,
3404 { "recordedNumberOfUnits", "isdn-sup.recordedNumberOfUnits",
3405 FT_UINT32, BASE_DEC, NULL, 0,
3406 "NumberOfUnits", HFILL }},
3407 { &hf_isdn_sup_notAvailable,
3408 { "notAvailable", "isdn-sup.notAvailable_element",
3409 FT_NONE, BASE_NONE, NULL, 0,
3410 NULL, HFILL }},
3411 { &hf_isdn_sup_recordedTypeOfUnits,
3412 { "recordedTypeOfUnits", "isdn-sup.recordedTypeOfUnits",
3413 FT_UINT32, BASE_DEC, NULL, 0,
3414 "TypeOfUnit", HFILL }},
3415 { &hf_isdn_sup_aocecurrencycc,
3416 { "cc", "isdn-sup.aocecurrencycc",
3417 FT_UINT32, BASE_DEC, VALS(isdn_sup_AOCECurrencyCc_vals), 0,
3418 "AOCECurrencyCc", HFILL }},
3419 { &hf_isdn_sup_aoceccspecificCurrency,
3420 { "specificCurrency", "isdn-sup.aoceccspecificCurrency_element",
3421 FT_NONE, BASE_NONE, NULL, 0,
3422 "AOCECcSpecificCurrency", HFILL }},
3423 { &hf_isdn_sup_aOCEBillingId,
3424 { "aOCEBillingId", "isdn-sup.aOCEBillingId",
3425 FT_UINT32, BASE_DEC, VALS(isdn_sup_AOCEBillingId_vals), 0,
3426 NULL, HFILL }},
3427 { &hf_isdn_sup_chargingAssociation,
3428 { "chargingAssociation", "isdn-sup.chargingAssociation",
3429 FT_UINT32, BASE_DEC, VALS(isdn_sup_ChargingAssociation_vals), 0,
3430 NULL, HFILL }},
3431 { &hf_isdn_sup_aocechargingunitcc,
3432 { "cc", "isdn-sup.aocechargingunitcc",
3433 FT_UINT32, BASE_DEC, VALS(isdn_sup_AOCEChargingUnitCc_vals), 0,
3434 "AOCEChargingUnitCc", HFILL }},
3435 { &hf_isdn_sup_aoceccspecificchargingunits,
3436 { "specificChargingUnits", "isdn-sup.aoceccspecificchargingunits_element",
3437 FT_NONE, BASE_NONE, NULL, 0,
3438 "AOCECcSpecificChargingUnits", HFILL }},
3439 { &hf_isdn_sup_currencyAmount,
3440 { "currencyAmount", "isdn-sup.currencyAmount",
3441 FT_UINT32, BASE_DEC, NULL, 0,
3442 NULL, HFILL }},
3443 { &hf_isdn_sup_multiplier,
3444 { "multiplier", "isdn-sup.multiplier",
3445 FT_UINT32, BASE_DEC, VALS(isdn_sup_Multiplier_vals), 0,
3446 NULL, HFILL }},
3447 { &hf_isdn_sup_lengthOfTimeUnit,
3448 { "lengthOfTimeUnit", "isdn-sup.lengthOfTimeUnit",
3449 FT_UINT32, BASE_DEC, NULL, 0,
3450 NULL, HFILL }},
3451 { &hf_isdn_sup_scale,
3452 { "scale", "isdn-sup.scale",
3453 FT_UINT32, BASE_DEC, VALS(isdn_sup_Scale_vals), 0,
3454 NULL, HFILL }},
3455 { &hf_isdn_sup_chargeNumber,
3456 { "chargeNumber", "isdn-sup.chargeNumber",
3457 FT_UINT32, BASE_DEC, VALS(isdn_sup_PartyNumber_vals), 0,
3458 "PartyNumber", HFILL }},
3459 { &hf_isdn_sup_chargeIdentifier,
3460 { "chargeIdentifier", "isdn-sup.chargeIdentifier",
3461 FT_INT32, BASE_DEC, NULL, 0,
3462 NULL, HFILL }},
3463 { &hf_isdn_sup_oARequested,
3464 { "oARequested", "isdn-sup.oARequested",
3465 FT_BOOLEAN, BASE_NONE, NULL, 0,
3466 NULL, HFILL }},
3467 { &hf_isdn_sup_cUGIndex,
3468 { "cUGIndex", "isdn-sup.cUGIndex",
3469 FT_UINT32, BASE_DEC, NULL, 0,
3470 NULL, HFILL }},
3471 { &hf_isdn_sup_conferenceId,
3472 { "conferenceId", "isdn-sup.conferenceId",
3473 FT_UINT32, BASE_DEC, NULL, 0,
3474 NULL, HFILL }},
3475 { &hf_isdn_sup_partyId,
3476 { "partyId", "isdn-sup.partyId",
3477 FT_UINT32, BASE_DEC, NULL, 0,
3478 NULL, HFILL }},
3479 { &hf_isdn_sup_procedure,
3480 { "procedure", "isdn-sup.procedure",
3481 FT_UINT32, BASE_DEC, VALS(isdn_sup_Procedure_vals), 0,
3482 NULL, HFILL }},
3483 { &hf_isdn_sup_basicService,
3484 { "basicService", "isdn-sup.basicService",
3485 FT_UINT32, BASE_DEC, VALS(isdn_sup_BasicService_vals), 0,
3486 NULL, HFILL }},
3487 { &hf_isdn_sup_forwardedToAddress,
3488 { "forwardedToAddress", "isdn-sup.forwardedToAddress_element",
3489 FT_NONE, BASE_NONE, NULL, 0,
3490 "Address", HFILL }},
3491 { &hf_isdn_sup_servedUserNr,
3492 { "servedUserNr", "isdn-sup.servedUserNr",
3493 FT_UINT32, BASE_DEC, VALS(isdn_sup_ServedUserNr_vals), 0,
3494 NULL, HFILL }},
3495 { &hf_isdn_sup_noReplyTimer,
3496 { "noReplyTimer", "isdn-sup.noReplyTimer",
3497 FT_UINT32, BASE_DEC, NULL, 0,
3498 NULL, HFILL }},
3499 { &hf_isdn_sup_forwardedToAddresss,
3500 { "forwardedToAddresss", "isdn-sup.forwardedToAddresss_element",
3501 FT_NONE, BASE_NONE, NULL, 0,
3502 "Address", HFILL }},
3503 { &hf_isdn_sup_diversionReason,
3504 { "diversionReason", "isdn-sup.diversionReason",
3505 FT_UINT32, BASE_DEC, VALS(isdn_sup_DiversionReason_vals), 0,
3506 NULL, HFILL }},
3507 { &hf_isdn_sup_servedUserSubaddress,
3508 { "servedUserSubaddress", "isdn-sup.servedUserSubaddress",
3509 FT_UINT32, BASE_DEC, VALS(isdn_sup_PartySubaddress_vals), 0,
3510 "PartySubaddress", HFILL }},
3511 { &hf_isdn_sup_callingAddress,
3512 { "callingAddress", "isdn-sup.callingAddress",
3513 FT_UINT32, BASE_DEC, VALS(isdn_sup_PresentedAddressScreened_vals), 0,
3514 "PresentedAddressScreened", HFILL }},
3515 { &hf_isdn_sup_originalCalledNr,
3516 { "originalCalledNr", "isdn-sup.originalCalledNr",
3517 FT_UINT32, BASE_DEC, VALS(isdn_sup_PresentedNumberUnscreened_vals), 0,
3518 "PresentedNumberUnscreened", HFILL }},
3519 { &hf_isdn_sup_lastDivertingNr,
3520 { "lastDivertingNr", "isdn-sup.lastDivertingNr",
3521 FT_UINT32, BASE_DEC, VALS(isdn_sup_PresentedNumberUnscreened_vals), 0,
3522 "PresentedNumberUnscreened", HFILL }},
3523 { &hf_isdn_sup_lastDivertingReason,
3524 { "lastDivertingReason", "isdn-sup.lastDivertingReason",
3525 FT_UINT32, BASE_DEC, VALS(isdn_sup_DiversionReason_vals), 0,
3526 "DiversionReason", HFILL }},
3527 { &hf_isdn_sup_userInfo,
3528 { "userInfo", "isdn-sup.userInfo",
3529 FT_BYTES, BASE_NONE, NULL, 0,
3530 "Q931InformationElement", HFILL }},
3531 { &hf_isdn_sup_deflectionAddress,
3532 { "deflectionAddress", "isdn-sup.deflectionAddress_element",
3533 FT_NONE, BASE_NONE, NULL, 0,
3534 "Address", HFILL }},
3535 { &hf_isdn_sup_presentationAllowedDivertedToUser,
3536 { "presentationAllowedDivertedToUser", "isdn-sup.presentationAllowedDivertedToUser",
3537 FT_BOOLEAN, BASE_NONE, NULL, 0,
3538 "PresentationAllowedIndicator", HFILL }},
3539 { &hf_isdn_sup_rerouteingReason,
3540 { "rerouteingReason", "isdn-sup.rerouteingReason",
3541 FT_UINT32, BASE_DEC, VALS(isdn_sup_DiversionReason_vals), 0,
3542 "DiversionReason", HFILL }},
3543 { &hf_isdn_sup_calledAddress,
3544 { "calledAddress", "isdn-sup.calledAddress_element",
3545 FT_NONE, BASE_NONE, NULL, 0,
3546 "Address", HFILL }},
3547 { &hf_isdn_sup_rerouteingCounter,
3548 { "rerouteingCounter", "isdn-sup.rerouteingCounter",
3549 FT_UINT32, BASE_DEC, NULL, 0,
3550 "DiversionCounter", HFILL }},
3551 { &hf_isdn_sup_q931InfoElement,
3552 { "q931InfoElement", "isdn-sup.q931InfoElement",
3553 FT_BYTES, BASE_NONE, NULL, 0,
3554 "Q931InformationElement", HFILL }},
3555 { &hf_isdn_sup_lastRerouteingNr,
3556 { "lastRerouteingNr", "isdn-sup.lastRerouteingNr",
3557 FT_UINT32, BASE_DEC, VALS(isdn_sup_PresentedNumberUnscreened_vals), 0,
3558 "PresentedNumberUnscreened", HFILL }},
3559 { &hf_isdn_sup_subscriptionOption,
3560 { "subscriptionOption", "isdn-sup.subscriptionOption",
3561 FT_UINT32, BASE_DEC, VALS(isdn_sup_SubscriptionOption_vals), 0,
3562 NULL, HFILL }},
3563 { &hf_isdn_sup_callingPartySubaddress,
3564 { "callingPartySubaddress", "isdn-sup.callingPartySubaddress",
3565 FT_UINT32, BASE_DEC, VALS(isdn_sup_PartySubaddress_vals), 0,
3566 "PartySubaddress", HFILL }},
3567 { &hf_isdn_sup_divertedToNumber,
3568 { "divertedToNumber", "isdn-sup.divertedToNumber",
3569 FT_UINT32, BASE_DEC, VALS(isdn_sup_PresentedNumberUnscreened_vals), 0,
3570 "PresentedNumberUnscreened", HFILL }},
3571 { &hf_isdn_sup_diversionCounter,
3572 { "diversionCounter", "isdn-sup.diversionCounter",
3573 FT_UINT32, BASE_DEC, NULL, 0,
3574 NULL, HFILL }},
3575 { &hf_isdn_sup_divertingNr,
3576 { "divertingNr", "isdn-sup.divertingNr",
3577 FT_UINT32, BASE_DEC, VALS(isdn_sup_PresentedNumberUnscreened_vals), 0,
3578 "PresentedNumberUnscreened", HFILL }},
3579 { &hf_isdn_sup_IntResultList_item,
3580 { "IntResult", "isdn-sup.IntResult_element",
3581 FT_NONE, BASE_NONE, NULL, 0,
3582 NULL, HFILL }},
3583 { &hf_isdn_sup_individualNumber,
3584 { "individualNumber", "isdn-sup.individualNumber",
3585 FT_UINT32, BASE_DEC, VALS(isdn_sup_PartyNumber_vals), 0,
3586 "PartyNumber", HFILL }},
3587 { &hf_isdn_sup_allNumbers,
3588 { "allNumbers", "isdn-sup.allNumbers_element",
3589 FT_NONE, BASE_NONE, NULL, 0,
3590 NULL, HFILL }},
3591 { &hf_isdn_sup_ServedUserNumberList_item,
3592 { "PartyNumber", "isdn-sup.PartyNumber",
3593 FT_UINT32, BASE_DEC, VALS(isdn_sup_PartyNumber_vals), 0,
3594 NULL, HFILL }},
3595 { &hf_isdn_sup_service,
3596 { "service", "isdn-sup.service",
3597 FT_UINT32, BASE_DEC, VALS(isdn_sup_Service_vals), 0,
3598 NULL, HFILL }},
3599 { &hf_isdn_sup_preferred,
3600 { "preferred", "isdn-sup.preferred",
3601 FT_BOOLEAN, BASE_NONE, NULL, 0,
3602 NULL, HFILL }},
3603 { &hf_isdn_sup_servedUserDestination,
3604 { "servedUserDestination", "isdn-sup.servedUserDestination",
3605 FT_UINT32, BASE_DEC, VALS(isdn_sup_PartyNumber_vals), 0,
3606 "PartyNumber", HFILL }},
3607 { &hf_isdn_sup_queueIdentity,
3608 { "queueIdentity", "isdn-sup.queueIdentity",
3609 FT_UINT32, BASE_DEC, NULL, 0,
3610 NULL, HFILL }},
3611 { &hf_isdn_sup_fPHReference,
3612 { "fPHReference", "isdn-sup.fPHReference",
3613 FT_UINT32, BASE_DEC, NULL, 0,
3614 NULL, HFILL }},
3615 { &hf_isdn_sup_calledFreephoneNr,
3616 { "calledFreephoneNr", "isdn-sup.calledFreephoneNr",
3617 FT_UINT32, BASE_DEC, VALS(isdn_sup_PartyNumber_vals), 0,
3618 NULL, HFILL }},
3619 { &hf_isdn_sup_mlppParams,
3620 { "mlppParams", "isdn-sup.mlppParams_element",
3621 FT_NONE, BASE_NONE, NULL, 0,
3622 NULL, HFILL }},
3623 { &hf_isdn_sup_ieArg,
3624 { "ieArg", "isdn-sup.ieArg",
3625 FT_BYTES, BASE_NONE, NULL, 0,
3626 NULL, HFILL }},
3627 { &hf_isdn_sup_precLevel,
3628 { "precLevel", "isdn-sup.precLevel",
3629 FT_UINT32, BASE_DEC, VALS(isdn_sup_PrecLevel_vals), 0,
3630 NULL, HFILL }},
3631 { &hf_isdn_sup_lfbIndictn,
3632 { "lfbIndictn", "isdn-sup.lfbIndictn",
3633 FT_UINT32, BASE_DEC, VALS(isdn_sup_LFBIndictn_vals), 0,
3634 NULL, HFILL }},
3635 { &hf_isdn_sup_mlppSvcDomn,
3636 { "mlppSvcDomn", "isdn-sup.mlppSvcDomn",
3637 FT_BYTES, BASE_NONE, NULL, 0,
3638 NULL, HFILL }},
3639 { &hf_isdn_sup_statusQuery,
3640 { "statusQuery", "isdn-sup.statusQuery",
3641 FT_UINT32, BASE_DEC, VALS(isdn_sup_StatusQuery_vals), 0,
3642 NULL, HFILL }},
3643 { &hf_isdn_sup_location,
3644 { "location", "isdn-sup.location",
3645 FT_BYTES, BASE_NONE, NULL, 0,
3646 NULL, HFILL }},
3649 /* List of subtrees */
3650 static int *ett[] = {
3651 &ett_isdn_sup,
3653 &ett_isdn_sup_PresentedAddressScreened,
3654 &ett_isdn_sup_PresentedAddressUnscreened,
3655 &ett_isdn_sup_PresentedNumberScreened,
3656 &ett_isdn_sup_PresentedNumberUnscreened,
3657 &ett_isdn_sup_AddressScreened,
3658 &ett_isdn_sup_NumberScreened,
3659 &ett_isdn_sup_Address,
3660 &ett_isdn_sup_PartyNumber,
3661 &ett_isdn_sup_PublicPartyNumber,
3662 &ett_isdn_sup_PrivatePartyNumber,
3663 &ett_isdn_sup_PartySubaddress,
3664 &ett_isdn_sup_UserSpecifiedSubaddress,
3665 &ett_isdn_sup_ChargingRequestRes,
3666 &ett_isdn_sup_AOCSCurrencyArg,
3667 &ett_isdn_sup_AOCSSpecialArrArg,
3668 &ett_isdn_sup_AOCDCurrencyArg,
3669 &ett_isdn_sup_AOCDChargingUnitArg,
3670 &ett_isdn_sup_AOCECurrencyArg,
3671 &ett_isdn_sup_AOCEChargingUnitArg,
3672 &ett_isdn_sup_AOCSCurrencyInfoList,
3673 &ett_isdn_sup_AOCSCurrencyInfo,
3674 &ett_isdn_sup_T_chargingtype,
3675 &ett_isdn_sup_AOCSChargingTypeSpecificCurrency,
3676 &ett_isdn_sup_DurationCurrency,
3677 &ett_isdn_sup_FlatRateCurrency,
3678 &ett_isdn_sup_VolumeRateCurrency,
3679 &ett_isdn_sup_AOCDCurrencyInfo,
3680 &ett_isdn_sup_AOCDSpecificCurrency,
3681 &ett_isdn_sup_AOCDChargingUnitInfo,
3682 &ett_isdn_sup_AOCDSpecificChargingUnits,
3683 &ett_isdn_sup_RecordedCurrency,
3684 &ett_isdn_sup_RecordedUnitsList,
3685 &ett_isdn_sup_RecordedUnits,
3686 &ett_isdn_sup_RecoredUnitsCc,
3687 &ett_isdn_sup_AOCECurrencyInfo,
3688 &ett_isdn_sup_AOCECurrencyCc,
3689 &ett_isdn_sup_AOCECcSpecificCurrency,
3690 &ett_isdn_sup_AOCEChargingUnitInfo,
3691 &ett_isdn_sup_AOCEChargingUnitCc,
3692 &ett_isdn_sup_AOCECcSpecificChargingUnits,
3693 &ett_isdn_sup_Amount,
3694 &ett_isdn_sup_Time,
3695 &ett_isdn_sup_ChargingAssociation,
3696 &ett_isdn_sup_CUGcallArg,
3697 &ett_isdn_sup_BeginCONFRes,
3698 &ett_isdn_sup_SplitCONFArg,
3699 &ett_isdn_sup_ActivationDiversionArg,
3700 &ett_isdn_sup_DeactivationDiversionArg,
3701 &ett_isdn_sup_ActivationStatusNotificationDivArg,
3702 &ett_isdn_sup_DeactivationStatusNotificationDivArg,
3703 &ett_isdn_sup_InterrogationDiversionArg,
3704 &ett_isdn_sup_DiversionInformationArg,
3705 &ett_isdn_sup_CallDeflectionArg,
3706 &ett_isdn_sup_CallRerouteingArg,
3707 &ett_isdn_sup_DivertingLegInformation1Arg,
3708 &ett_isdn_sup_DivertingLegInformation2Arg,
3709 &ett_isdn_sup_IntResultList,
3710 &ett_isdn_sup_IntResult,
3711 &ett_isdn_sup_ServedUserNr,
3712 &ett_isdn_sup_ServedUserNumberList,
3713 &ett_isdn_sup_UserUserServiceArg,
3714 &ett_isdn_sup_Monitor_T_FPHArg,
3715 &ett_isdn_sup_Free_T_FPHArg,
3716 &ett_isdn_sup_Call_T_FPHArg,
3717 &ett_isdn_sup_MLPPLFBArg,
3718 &ett_isdn_sup_MLPPParams,
3719 &ett_isdn_sup_MLPPLFBResp,
3722 static ei_register_info ei[] = {
3723 #if 0
3724 { &ei_isdn_sup_unsupported_arg_type, { "isdn_sup.unsupported.arg_type", PI_UNDECODED, PI_WARN, "UNSUPPORTED ARGUMENT TYPE (ETSI sup)", EXPFILL }},
3725 #endif
3726 { &ei_isdn_sup_unsupported_result_type, { "isdn_sup.unsupported.result_type", PI_UNDECODED, PI_WARN, "UNSUPPORTED RESULT TYPE (ETSI sup)", EXPFILL }},
3727 { &ei_isdn_sup_unsupported_error_type, { "isdn_sup.unsupported.error_type", PI_UNDECODED, PI_WARN, "UNSUPPORTED ERROR TYPE (ETSI sup)", EXPFILL }},
3730 expert_module_t* expert_isdn_sup;
3732 /* Register protocol */
3733 proto_isdn_sup = proto_register_protocol(PNAME, PSNAME, PFNAME);
3735 /* Register fields and subtrees */
3736 proto_register_field_array(proto_isdn_sup, hf, array_length(hf));
3737 proto_register_subtree_array(ett, array_length(ett));
3738 expert_isdn_sup = expert_register_protocol(proto_isdn_sup);
3739 expert_register_field_array(expert_isdn_sup, ei, array_length(ei));
3741 /* Register dissectors */
3742 isdn_sup_arg_handle = register_dissector(PFNAME "_arg", dissect_isdn_sup_arg, proto_isdn_sup);
3743 isdn_sup_res_handle = register_dissector(PFNAME "_res", dissect_isdn_sup_res, proto_isdn_sup);
3744 isdn_sup_err_handle = register_dissector(PFNAME "_err", dissect_isdn_sup_err, proto_isdn_sup);