convert to proto_tree_add_subtree[_format] for ASN.1 dissectors
[metze/wireshark/wip.git] / epan / dissectors / packet-charging_ase.c
1 /* Do not modify this file. Changes will be overwritten.                      */
2 /* Generated automatically by the ASN.1 to Wireshark dissector compiler       */
3 /* packet-charging_ase.c                                                      */
4 /* ../../tools/asn2wrs.py -b -p charging_ase -c ./charging_ase.cnf -s ./packet-charging_ase-template -D . -O ../../epan/dissectors Tariffing-Data-Types.asn */
5
6 /* Input file: packet-charging_ase-template.c */
7
8 #line 1 "../../asn1/charging_ase/packet-charging_ase-template.c"
9 /* packet-charging_ase-template.c
10  * Copyright 2009 , Anders Broman <anders.broman [AT] ericsson.com>
11  *
12  * Wireshark - Network traffic analyzer
13  * By Gerald Combs <gerald@wireshark.org>
14  * Copyright 1998 Gerald Combs
15  *
16  * This program is free software; you can redistribute it and/or
17  * modify it under the terms of the GNU General Public License
18  * as published by the Free Software Foundation; either version 2
19  * of the License, or (at your option) any later version.
20  *
21  * This program is distributed in the hope that it will be useful,
22  * but WITHOUT ANY WARRANTY; without even the implied warranty of
23  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
24  * GNU General Public License for more details.
25  *
26  * You should have received a copy of the GNU General Public License
27  * along with this program; if not, write to the Free Software
28  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
29  * References: ETSI ES 201 296 V1.3.1 (2003-04)
30  */
31
32 #include "config.h"
33
34 #include <glib.h>
35 #include <epan/packet.h>
36 #include <epan/asn1.h>
37
38 #include "packet-ber.h"
39 #include "packet-charging_ase.h"
40
41 #define PNAME  "Charging ASE"
42 #define PSNAME "ChargingASE"
43 #define PFNAME "chargingase"
44
45 void proto_register_charging_ase(void);
46 void proto_reg_handoff_charging_ase(void);
47
48 /* Define the Charging ASE proto */
49 static int proto_charging_ase = -1;
50
51
52 /*--- Included file: packet-charging_ase-hf.c ---*/
53 #line 1 "../../asn1/charging_ase/packet-charging_ase-hf.c"
54 static int hf_charging_ase_charging_ase_ChargingMessageType_PDU = -1;  /* ChargingMessageType */
55 static int hf_charging_ase_crgt = -1;             /* ChargingTariffInformation */
56 static int hf_charging_ase_aocrg = -1;            /* AddOnChargingInformation */
57 static int hf_charging_ase_crga = -1;             /* ChargingAcknowledgementInformation */
58 static int hf_charging_ase_start = -1;            /* StartCharging */
59 static int hf_charging_ase_stop = -1;             /* StopCharging */
60 static int hf_charging_ase_acknowledgementIndicators = -1;  /* T_acknowledgementIndicators */
61 static int hf_charging_ase_extensions = -1;       /* SEQUENCE_SIZE_1_numOfExtensions_OF_ExtensionField */
62 static int hf_charging_ase_extensions_item = -1;  /* ExtensionField */
63 static int hf_charging_ase_originationIdentification = -1;  /* ChargingReferenceIdentification */
64 static int hf_charging_ase_destinationIdentification = -1;  /* ChargingReferenceIdentification */
65 static int hf_charging_ase_chargingControlIndicators = -1;  /* ChargingControlIndicators */
66 static int hf_charging_ase_addOncharge = -1;      /* T_addOncharge */
67 static int hf_charging_ase_addOnChargeCurrency = -1;  /* CurrencyFactorScale */
68 static int hf_charging_ase_addOnChargePulse = -1;  /* PulseUnits */
69 static int hf_charging_ase_currency = -1;         /* Currency */
70 static int hf_charging_ase_chargingTariff = -1;   /* T_chargingTariff */
71 static int hf_charging_ase_tariffCurrency = -1;   /* TariffCurrency */
72 static int hf_charging_ase_tariffPulse = -1;      /* TariffPulse */
73 static int hf_charging_ase_local = -1;            /* INTEGER */
74 static int hf_charging_ase_global = -1;           /* OBJECT_IDENTIFIER */
75 static int hf_charging_ase_currencyFactorScale = -1;  /* CurrencyFactorScale */
76 static int hf_charging_ase_tariffDuration = -1;   /* TariffDuration */
77 static int hf_charging_ase_subTariffControl = -1;  /* SubTariffControl */
78 static int hf_charging_ase_pulseUnits = -1;       /* PulseUnits */
79 static int hf_charging_ase_chargeUnitTimeInterval = -1;  /* ChargeUnitTimeInterval */
80 static int hf_charging_ase_currencyFactor = -1;   /* CurrencyFactor */
81 static int hf_charging_ase_currencyScale = -1;    /* CurrencyScale */
82 static int hf_charging_ase_type = -1;             /* Code */
83 static int hf_charging_ase_criticality = -1;      /* CriticalityType */
84 static int hf_charging_ase_value = -1;            /* T_value */
85 static int hf_charging_ase_networkOperators = -1;  /* SEQUENCE_SIZE_1_maxNetworkOperators_OF_NetworkIdentification */
86 static int hf_charging_ase_networkOperators_item = -1;  /* NetworkIdentification */
87 static int hf_charging_ase_stopIndicators = -1;   /* T_stopIndicators */
88 static int hf_charging_ase_currentTariffCurrency = -1;  /* TariffCurrencyFormat */
89 static int hf_charging_ase_tariffSwitchCurrency = -1;  /* TariffSwitchCurrency */
90 static int hf_charging_ase_nextTariffCurrency = -1;  /* TariffCurrencyFormat */
91 static int hf_charging_ase_tariffSwitchoverTime = -1;  /* TariffSwitchoverTime */
92 static int hf_charging_ase_communicationChargeSequenceCurrency = -1;  /* SEQUENCE_SIZE_minCommunicationTariffNum_maxCommunicationTariffNum_OF_CommunicationChargeCurrency */
93 static int hf_charging_ase_communicationChargeSequenceCurrency_item = -1;  /* CommunicationChargeCurrency */
94 static int hf_charging_ase_tariffControlIndicators = -1;  /* T_tariffControlIndicators */
95 static int hf_charging_ase_callAttemptChargeCurrency = -1;  /* CurrencyFactorScale */
96 static int hf_charging_ase_callSetupChargeCurrency = -1;  /* CurrencyFactorScale */
97 static int hf_charging_ase_currentTariffPulse = -1;  /* TariffPulseFormat */
98 static int hf_charging_ase_tariffSwitchPulse = -1;  /* TariffSwitchPulse */
99 static int hf_charging_ase_nextTariffPulse = -1;  /* TariffPulseFormat */
100 static int hf_charging_ase_communicationChargeSequencePulse = -1;  /* SEQUENCE_SIZE_minCommunicationTariffNum_maxCommunicationTariffNum_OF_CommunicationChargePulse */
101 static int hf_charging_ase_communicationChargeSequencePulse_item = -1;  /* CommunicationChargePulse */
102 static int hf_charging_ase_tariffControlIndicators_01 = -1;  /* T_tariffControlIndicators_01 */
103 static int hf_charging_ase_callAttemptChargePulse = -1;  /* PulseUnits */
104 static int hf_charging_ase_callSetupChargePulse = -1;  /* PulseUnits */
105 static int hf_charging_ase_networkIdentification = -1;  /* NetworkIdentification */
106 static int hf_charging_ase_referenceID = -1;      /* ReferenceID */
107 /* named bits */
108 static int hf_charging_ase_T_acknowledgementIndicators_accepted = -1;
109 static int hf_charging_ase_ChargingControlIndicators_subscriberCharge = -1;
110 static int hf_charging_ase_ChargingControlIndicators_immediateChangeOfActuallyAppliedTariff = -1;
111 static int hf_charging_ase_ChargingControlIndicators_delayUntilStart = -1;
112 static int hf_charging_ase_T_stopIndicators_callAttemptChargesApplicable = -1;
113 static int hf_charging_ase_SubTariffControl_oneTimeCharge = -1;
114 static int hf_charging_ase_T_tariffControlIndicators_non_cyclicTariff = -1;
115 static int hf_charging_ase_T_tariffControlIndicators_01_non_cyclicTariff = -1;
116
117 /*--- End of included file: packet-charging_ase-hf.c ---*/
118 #line 44 "../../asn1/charging_ase/packet-charging_ase-template.c"
119
120 static int ett_charging_ase = -1;
121
122 /*--- Included file: packet-charging_ase-ett.c ---*/
123 #line 1 "../../asn1/charging_ase/packet-charging_ase-ett.c"
124 static gint ett_charging_ase_ChargingMessageType = -1;
125 static gint ett_charging_ase_ChargingAcknowledgementInformation = -1;
126 static gint ett_charging_ase_T_acknowledgementIndicators = -1;
127 static gint ett_charging_ase_SEQUENCE_SIZE_1_numOfExtensions_OF_ExtensionField = -1;
128 static gint ett_charging_ase_ChargingControlIndicators = -1;
129 static gint ett_charging_ase_AddOnChargingInformation = -1;
130 static gint ett_charging_ase_T_addOncharge = -1;
131 static gint ett_charging_ase_ChargingTariffInformation = -1;
132 static gint ett_charging_ase_T_chargingTariff = -1;
133 static gint ett_charging_ase_Code = -1;
134 static gint ett_charging_ase_CommunicationChargeCurrency = -1;
135 static gint ett_charging_ase_CommunicationChargePulse = -1;
136 static gint ett_charging_ase_CurrencyFactorScale = -1;
137 static gint ett_charging_ase_ExtensionField = -1;
138 static gint ett_charging_ase_StartCharging = -1;
139 static gint ett_charging_ase_SEQUENCE_SIZE_1_maxNetworkOperators_OF_NetworkIdentification = -1;
140 static gint ett_charging_ase_StopCharging = -1;
141 static gint ett_charging_ase_T_stopIndicators = -1;
142 static gint ett_charging_ase_SubTariffControl = -1;
143 static gint ett_charging_ase_TariffCurrency = -1;
144 static gint ett_charging_ase_TariffSwitchCurrency = -1;
145 static gint ett_charging_ase_TariffCurrencyFormat = -1;
146 static gint ett_charging_ase_SEQUENCE_SIZE_minCommunicationTariffNum_maxCommunicationTariffNum_OF_CommunicationChargeCurrency = -1;
147 static gint ett_charging_ase_T_tariffControlIndicators = -1;
148 static gint ett_charging_ase_TariffPulse = -1;
149 static gint ett_charging_ase_TariffSwitchPulse = -1;
150 static gint ett_charging_ase_TariffPulseFormat = -1;
151 static gint ett_charging_ase_SEQUENCE_SIZE_minCommunicationTariffNum_maxCommunicationTariffNum_OF_CommunicationChargePulse = -1;
152 static gint ett_charging_ase_T_tariffControlIndicators_01 = -1;
153 static gint ett_charging_ase_ChargingReferenceIdentification = -1;
154
155 /*--- End of included file: packet-charging_ase-ett.c ---*/
156 #line 47 "../../asn1/charging_ase/packet-charging_ase-template.c"
157
158 static dissector_handle_t charging_ase_handle;
159
160
161 /*--- Included file: packet-charging_ase-fn.c ---*/
162 #line 1 "../../asn1/charging_ase/packet-charging_ase-fn.c"
163
164 static const asn_namedbit ChargingControlIndicators_bits[] = {
165   {  0, &hf_charging_ase_ChargingControlIndicators_subscriberCharge, -1, -1, "subscriberCharge", NULL },
166   {  1, &hf_charging_ase_ChargingControlIndicators_immediateChangeOfActuallyAppliedTariff, -1, -1, "immediateChangeOfActuallyAppliedTariff", NULL },
167   {  2, &hf_charging_ase_ChargingControlIndicators_delayUntilStart, -1, -1, "delayUntilStart", NULL },
168   { 0, NULL, 0, 0, NULL, NULL }
169 };
170
171 static int
172 dissect_charging_ase_ChargingControlIndicators(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
173   offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
174                                     ChargingControlIndicators_bits, hf_index, ett_charging_ase_ChargingControlIndicators,
175                                     NULL);
176
177   return offset;
178 }
179
180
181
182 static int
183 dissect_charging_ase_CurrencyFactor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
184   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
185                                                 NULL);
186
187   return offset;
188 }
189
190
191
192 static int
193 dissect_charging_ase_CurrencyScale(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
194   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
195                                                 NULL);
196
197   return offset;
198 }
199
200
201 static const ber_sequence_t CurrencyFactorScale_sequence[] = {
202   { &hf_charging_ase_currencyFactor, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_charging_ase_CurrencyFactor },
203   { &hf_charging_ase_currencyScale, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_charging_ase_CurrencyScale },
204   { NULL, 0, 0, 0, NULL }
205 };
206
207 static int
208 dissect_charging_ase_CurrencyFactorScale(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
209   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
210                                    CurrencyFactorScale_sequence, hf_index, ett_charging_ase_CurrencyFactorScale);
211
212   return offset;
213 }
214
215
216
217 static int
218 dissect_charging_ase_TariffDuration(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
219   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
220                                                 NULL);
221
222   return offset;
223 }
224
225
226 static const asn_namedbit SubTariffControl_bits[] = {
227   {  0, &hf_charging_ase_SubTariffControl_oneTimeCharge, -1, -1, "oneTimeCharge", NULL },
228   { 0, NULL, 0, 0, NULL, NULL }
229 };
230
231 static int
232 dissect_charging_ase_SubTariffControl(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
233   offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
234                                     SubTariffControl_bits, hf_index, ett_charging_ase_SubTariffControl,
235                                     NULL);
236
237   return offset;
238 }
239
240
241 static const ber_sequence_t CommunicationChargeCurrency_sequence[] = {
242   { &hf_charging_ase_currencyFactorScale, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_charging_ase_CurrencyFactorScale },
243   { &hf_charging_ase_tariffDuration, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_charging_ase_TariffDuration },
244   { &hf_charging_ase_subTariffControl, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_charging_ase_SubTariffControl },
245   { NULL, 0, 0, 0, NULL }
246 };
247
248 static int
249 dissect_charging_ase_CommunicationChargeCurrency(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
250   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
251                                    CommunicationChargeCurrency_sequence, hf_index, ett_charging_ase_CommunicationChargeCurrency);
252
253   return offset;
254 }
255
256
257 static const ber_sequence_t SEQUENCE_SIZE_minCommunicationTariffNum_maxCommunicationTariffNum_OF_CommunicationChargeCurrency_sequence_of[1] = {
258   { &hf_charging_ase_communicationChargeSequenceCurrency_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_charging_ase_CommunicationChargeCurrency },
259 };
260
261 static int
262 dissect_charging_ase_SEQUENCE_SIZE_minCommunicationTariffNum_maxCommunicationTariffNum_OF_CommunicationChargeCurrency(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
263   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
264                                       SEQUENCE_SIZE_minCommunicationTariffNum_maxCommunicationTariffNum_OF_CommunicationChargeCurrency_sequence_of, hf_index, ett_charging_ase_SEQUENCE_SIZE_minCommunicationTariffNum_maxCommunicationTariffNum_OF_CommunicationChargeCurrency);
265
266   return offset;
267 }
268
269
270 static const asn_namedbit T_tariffControlIndicators_bits[] = {
271   {  0, &hf_charging_ase_T_tariffControlIndicators_non_cyclicTariff, -1, -1, "non-cyclicTariff", NULL },
272   { 0, NULL, 0, 0, NULL, NULL }
273 };
274
275 static int
276 dissect_charging_ase_T_tariffControlIndicators(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
277   offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
278                                     T_tariffControlIndicators_bits, hf_index, ett_charging_ase_T_tariffControlIndicators,
279                                     NULL);
280
281   return offset;
282 }
283
284
285 static const ber_sequence_t TariffCurrencyFormat_sequence[] = {
286   { &hf_charging_ase_communicationChargeSequenceCurrency, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_charging_ase_SEQUENCE_SIZE_minCommunicationTariffNum_maxCommunicationTariffNum_OF_CommunicationChargeCurrency },
287   { &hf_charging_ase_tariffControlIndicators, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_charging_ase_T_tariffControlIndicators },
288   { &hf_charging_ase_callAttemptChargeCurrency, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_charging_ase_CurrencyFactorScale },
289   { &hf_charging_ase_callSetupChargeCurrency, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_charging_ase_CurrencyFactorScale },
290   { NULL, 0, 0, 0, NULL }
291 };
292
293 static int
294 dissect_charging_ase_TariffCurrencyFormat(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
295   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
296                                    TariffCurrencyFormat_sequence, hf_index, ett_charging_ase_TariffCurrencyFormat);
297
298   return offset;
299 }
300
301
302
303 static int
304 dissect_charging_ase_TariffSwitchoverTime(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
305   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
306                                        NULL);
307
308   return offset;
309 }
310
311
312 static const ber_sequence_t TariffSwitchCurrency_sequence[] = {
313   { &hf_charging_ase_nextTariffCurrency, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_charging_ase_TariffCurrencyFormat },
314   { &hf_charging_ase_tariffSwitchoverTime, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_charging_ase_TariffSwitchoverTime },
315   { NULL, 0, 0, 0, NULL }
316 };
317
318 static int
319 dissect_charging_ase_TariffSwitchCurrency(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
320   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
321                                    TariffSwitchCurrency_sequence, hf_index, ett_charging_ase_TariffSwitchCurrency);
322
323   return offset;
324 }
325
326
327 static const ber_sequence_t TariffCurrency_sequence[] = {
328   { &hf_charging_ase_currentTariffCurrency, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_charging_ase_TariffCurrencyFormat },
329   { &hf_charging_ase_tariffSwitchCurrency, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_charging_ase_TariffSwitchCurrency },
330   { NULL, 0, 0, 0, NULL }
331 };
332
333 static int
334 dissect_charging_ase_TariffCurrency(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
335   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
336                                    TariffCurrency_sequence, hf_index, ett_charging_ase_TariffCurrency);
337
338   return offset;
339 }
340
341
342
343 static int
344 dissect_charging_ase_PulseUnits(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
345   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
346                                        NULL);
347
348   return offset;
349 }
350
351
352
353 static int
354 dissect_charging_ase_ChargeUnitTimeInterval(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
355   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
356                                        NULL);
357
358   return offset;
359 }
360
361
362 static const ber_sequence_t CommunicationChargePulse_sequence[] = {
363   { &hf_charging_ase_pulseUnits, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_charging_ase_PulseUnits },
364   { &hf_charging_ase_chargeUnitTimeInterval, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_charging_ase_ChargeUnitTimeInterval },
365   { &hf_charging_ase_tariffDuration, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_charging_ase_TariffDuration },
366   { NULL, 0, 0, 0, NULL }
367 };
368
369 static int
370 dissect_charging_ase_CommunicationChargePulse(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
371   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
372                                    CommunicationChargePulse_sequence, hf_index, ett_charging_ase_CommunicationChargePulse);
373
374   return offset;
375 }
376
377
378 static const ber_sequence_t SEQUENCE_SIZE_minCommunicationTariffNum_maxCommunicationTariffNum_OF_CommunicationChargePulse_sequence_of[1] = {
379   { &hf_charging_ase_communicationChargeSequencePulse_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_charging_ase_CommunicationChargePulse },
380 };
381
382 static int
383 dissect_charging_ase_SEQUENCE_SIZE_minCommunicationTariffNum_maxCommunicationTariffNum_OF_CommunicationChargePulse(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
384   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
385                                       SEQUENCE_SIZE_minCommunicationTariffNum_maxCommunicationTariffNum_OF_CommunicationChargePulse_sequence_of, hf_index, ett_charging_ase_SEQUENCE_SIZE_minCommunicationTariffNum_maxCommunicationTariffNum_OF_CommunicationChargePulse);
386
387   return offset;
388 }
389
390
391 static const asn_namedbit T_tariffControlIndicators_01_bits[] = {
392   {  0, &hf_charging_ase_T_tariffControlIndicators_01_non_cyclicTariff, -1, -1, "non-cyclicTariff", NULL },
393   { 0, NULL, 0, 0, NULL, NULL }
394 };
395
396 static int
397 dissect_charging_ase_T_tariffControlIndicators_01(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
398   offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
399                                     T_tariffControlIndicators_01_bits, hf_index, ett_charging_ase_T_tariffControlIndicators_01,
400                                     NULL);
401
402   return offset;
403 }
404
405
406 static const ber_sequence_t TariffPulseFormat_sequence[] = {
407   { &hf_charging_ase_communicationChargeSequencePulse, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_charging_ase_SEQUENCE_SIZE_minCommunicationTariffNum_maxCommunicationTariffNum_OF_CommunicationChargePulse },
408   { &hf_charging_ase_tariffControlIndicators_01, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_charging_ase_T_tariffControlIndicators_01 },
409   { &hf_charging_ase_callAttemptChargePulse, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_charging_ase_PulseUnits },
410   { &hf_charging_ase_callSetupChargePulse, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_charging_ase_PulseUnits },
411   { NULL, 0, 0, 0, NULL }
412 };
413
414 static int
415 dissect_charging_ase_TariffPulseFormat(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
416   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
417                                    TariffPulseFormat_sequence, hf_index, ett_charging_ase_TariffPulseFormat);
418
419   return offset;
420 }
421
422
423 static const ber_sequence_t TariffSwitchPulse_sequence[] = {
424   { &hf_charging_ase_nextTariffPulse, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_charging_ase_TariffPulseFormat },
425   { &hf_charging_ase_tariffSwitchoverTime, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_charging_ase_TariffSwitchoverTime },
426   { NULL, 0, 0, 0, NULL }
427 };
428
429 static int
430 dissect_charging_ase_TariffSwitchPulse(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
431   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
432                                    TariffSwitchPulse_sequence, hf_index, ett_charging_ase_TariffSwitchPulse);
433
434   return offset;
435 }
436
437
438 static const ber_sequence_t TariffPulse_sequence[] = {
439   { &hf_charging_ase_currentTariffPulse, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_charging_ase_TariffPulseFormat },
440   { &hf_charging_ase_tariffSwitchPulse, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_charging_ase_TariffSwitchPulse },
441   { NULL, 0, 0, 0, NULL }
442 };
443
444 static int
445 dissect_charging_ase_TariffPulse(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
446   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
447                                    TariffPulse_sequence, hf_index, ett_charging_ase_TariffPulse);
448
449   return offset;
450 }
451
452
453 static const value_string charging_ase_T_chargingTariff_vals[] = {
454   {   0, "tariffCurrency" },
455   {   1, "tariffPulse" },
456   { 0, NULL }
457 };
458
459 static const ber_choice_t T_chargingTariff_choice[] = {
460   {   0, &hf_charging_ase_tariffCurrency, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_charging_ase_TariffCurrency },
461   {   1, &hf_charging_ase_tariffPulse, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_charging_ase_TariffPulse },
462   { 0, NULL, 0, 0, 0, NULL }
463 };
464
465 static int
466 dissect_charging_ase_T_chargingTariff(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
467   offset = dissect_ber_choice(actx, tree, tvb, offset,
468                                  T_chargingTariff_choice, hf_index, ett_charging_ase_T_chargingTariff,
469                                  NULL);
470
471   return offset;
472 }
473
474
475
476 static int
477 dissect_charging_ase_INTEGER(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
478   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
479                                                 NULL);
480
481   return offset;
482 }
483
484
485
486 static int
487 dissect_charging_ase_OBJECT_IDENTIFIER(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
488   offset = dissect_ber_object_identifier(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
489
490   return offset;
491 }
492
493
494 static const value_string charging_ase_Code_vals[] = {
495   {   0, "local" },
496   {   1, "global" },
497   { 0, NULL }
498 };
499
500 static const ber_choice_t Code_choice[] = {
501   {   0, &hf_charging_ase_local  , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_charging_ase_INTEGER },
502   {   1, &hf_charging_ase_global , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_charging_ase_OBJECT_IDENTIFIER },
503   { 0, NULL, 0, 0, 0, NULL }
504 };
505
506 static int
507 dissect_charging_ase_Code(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
508   offset = dissect_ber_choice(actx, tree, tvb, offset,
509                                  Code_choice, hf_index, ett_charging_ase_Code,
510                                  NULL);
511
512   return offset;
513 }
514
515
516 static const value_string charging_ase_CriticalityType_vals[] = {
517   {   0, "ignore" },
518   {   1, "abort" },
519   { 0, NULL }
520 };
521
522
523 static int
524 dissect_charging_ase_CriticalityType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
525   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
526                                   NULL);
527
528   return offset;
529 }
530
531
532
533 static int
534 dissect_charging_ase_T_value(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
535 #line 13 "../../asn1/charging_ase/charging_ase.cnf"
536
537         proto_tree_add_text(tree, tvb, offset, -1, "Extensions not dissected");
538         return tvb_length(tvb);
539
540
541   return offset;
542 }
543
544
545 static const ber_sequence_t ExtensionField_sequence[] = {
546   { &hf_charging_ase_type   , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_charging_ase_Code },
547   { &hf_charging_ase_criticality, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_charging_ase_CriticalityType },
548   { &hf_charging_ase_value  , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_charging_ase_T_value },
549   { NULL, 0, 0, 0, NULL }
550 };
551
552 static int
553 dissect_charging_ase_ExtensionField(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
554   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
555                                    ExtensionField_sequence, hf_index, ett_charging_ase_ExtensionField);
556
557   return offset;
558 }
559
560
561 static const ber_sequence_t SEQUENCE_SIZE_1_numOfExtensions_OF_ExtensionField_sequence_of[1] = {
562   { &hf_charging_ase_extensions_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_charging_ase_ExtensionField },
563 };
564
565 static int
566 dissect_charging_ase_SEQUENCE_SIZE_1_numOfExtensions_OF_ExtensionField(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
567   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
568                                       SEQUENCE_SIZE_1_numOfExtensions_OF_ExtensionField_sequence_of, hf_index, ett_charging_ase_SEQUENCE_SIZE_1_numOfExtensions_OF_ExtensionField);
569
570   return offset;
571 }
572
573
574
575 static int
576 dissect_charging_ase_NetworkIdentification(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
577   offset = dissect_ber_object_identifier(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
578
579   return offset;
580 }
581
582
583
584 static int
585 dissect_charging_ase_ReferenceID(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
586   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
587                                                 NULL);
588
589   return offset;
590 }
591
592
593 static const ber_sequence_t ChargingReferenceIdentification_sequence[] = {
594   { &hf_charging_ase_networkIdentification, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_charging_ase_NetworkIdentification },
595   { &hf_charging_ase_referenceID, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_charging_ase_ReferenceID },
596   { NULL, 0, 0, 0, NULL }
597 };
598
599 static int
600 dissect_charging_ase_ChargingReferenceIdentification(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
601   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
602                                    ChargingReferenceIdentification_sequence, hf_index, ett_charging_ase_ChargingReferenceIdentification);
603
604   return offset;
605 }
606
607
608 static const value_string charging_ase_Currency_vals[] = {
609   {   0, "noIndication" },
610   {   1, "australianDollar" },
611   {   2, "austrianSchilling" },
612   {   3, "belgianFranc" },
613   {   4, "britishPound" },
614   {   5, "czechKoruna" },
615   {   6, "danishKrone" },
616   {   7, "dutchGuilder" },
617   {   8, "euro" },
618   {   9, "finnishMarkka" },
619   {  10, "frenchFranc" },
620   {  11, "germanMark" },
621   {  12, "greekDrachma" },
622   {  13, "hungarianForint" },
623   {  14, "irishPunt" },
624   {  15, "italianLira" },
625   {  16, "japaneseYen" },
626   {  17, "luxembourgian-Franc" },
627   {  18, "norwegianKrone" },
628   {  19, "polishZloty" },
629   {  20, "portugeseEscudo" },
630   {  21, "russianRouble" },
631   {  22, "slovakKoruna" },
632   {  23, "spanishPeseta" },
633   {  24, "swedishKrone" },
634   {  25, "swissFranc" },
635   {  26, "turkishLira" },
636   {  27, "uSDollar" },
637   { 0, NULL }
638 };
639
640
641 static int
642 dissect_charging_ase_Currency(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
643   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
644                                   NULL);
645
646   return offset;
647 }
648
649
650 static const ber_sequence_t ChargingTariffInformation_sequence[] = {
651   { &hf_charging_ase_chargingControlIndicators, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_charging_ase_ChargingControlIndicators },
652   { &hf_charging_ase_chargingTariff, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_charging_ase_T_chargingTariff },
653   { &hf_charging_ase_extensions, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_charging_ase_SEQUENCE_SIZE_1_numOfExtensions_OF_ExtensionField },
654   { &hf_charging_ase_originationIdentification, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_charging_ase_ChargingReferenceIdentification },
655   { &hf_charging_ase_destinationIdentification, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_charging_ase_ChargingReferenceIdentification },
656   { &hf_charging_ase_currency, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_charging_ase_Currency },
657   { NULL, 0, 0, 0, NULL }
658 };
659
660 static int
661 dissect_charging_ase_ChargingTariffInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
662   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
663                                    ChargingTariffInformation_sequence, hf_index, ett_charging_ase_ChargingTariffInformation);
664
665   return offset;
666 }
667
668
669 static const value_string charging_ase_T_addOncharge_vals[] = {
670   {   0, "addOnChargeCurrency" },
671   {   1, "addOnChargePulse" },
672   { 0, NULL }
673 };
674
675 static const ber_choice_t T_addOncharge_choice[] = {
676   {   0, &hf_charging_ase_addOnChargeCurrency, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_charging_ase_CurrencyFactorScale },
677   {   1, &hf_charging_ase_addOnChargePulse, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_charging_ase_PulseUnits },
678   { 0, NULL, 0, 0, 0, NULL }
679 };
680
681 static int
682 dissect_charging_ase_T_addOncharge(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
683   offset = dissect_ber_choice(actx, tree, tvb, offset,
684                                  T_addOncharge_choice, hf_index, ett_charging_ase_T_addOncharge,
685                                  NULL);
686
687   return offset;
688 }
689
690
691 static const ber_sequence_t AddOnChargingInformation_sequence[] = {
692   { &hf_charging_ase_chargingControlIndicators, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_charging_ase_ChargingControlIndicators },
693   { &hf_charging_ase_addOncharge, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_charging_ase_T_addOncharge },
694   { &hf_charging_ase_extensions, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_charging_ase_SEQUENCE_SIZE_1_numOfExtensions_OF_ExtensionField },
695   { &hf_charging_ase_originationIdentification, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_charging_ase_ChargingReferenceIdentification },
696   { &hf_charging_ase_destinationIdentification, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_charging_ase_ChargingReferenceIdentification },
697   { &hf_charging_ase_currency, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_charging_ase_Currency },
698   { NULL, 0, 0, 0, NULL }
699 };
700
701 static int
702 dissect_charging_ase_AddOnChargingInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
703   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
704                                    AddOnChargingInformation_sequence, hf_index, ett_charging_ase_AddOnChargingInformation);
705
706   return offset;
707 }
708
709
710 static const asn_namedbit T_acknowledgementIndicators_bits[] = {
711   {  0, &hf_charging_ase_T_acknowledgementIndicators_accepted, -1, -1, "accepted", NULL },
712   { 0, NULL, 0, 0, NULL, NULL }
713 };
714
715 static int
716 dissect_charging_ase_T_acknowledgementIndicators(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
717   offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
718                                     T_acknowledgementIndicators_bits, hf_index, ett_charging_ase_T_acknowledgementIndicators,
719                                     NULL);
720
721   return offset;
722 }
723
724
725 static const ber_sequence_t ChargingAcknowledgementInformation_sequence[] = {
726   { &hf_charging_ase_acknowledgementIndicators, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_charging_ase_T_acknowledgementIndicators },
727   { &hf_charging_ase_extensions, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_charging_ase_SEQUENCE_SIZE_1_numOfExtensions_OF_ExtensionField },
728   { &hf_charging_ase_originationIdentification, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_charging_ase_ChargingReferenceIdentification },
729   { &hf_charging_ase_destinationIdentification, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_charging_ase_ChargingReferenceIdentification },
730   { NULL, 0, 0, 0, NULL }
731 };
732
733 static int
734 dissect_charging_ase_ChargingAcknowledgementInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
735   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
736                                    ChargingAcknowledgementInformation_sequence, hf_index, ett_charging_ase_ChargingAcknowledgementInformation);
737
738   return offset;
739 }
740
741
742 static const ber_sequence_t SEQUENCE_SIZE_1_maxNetworkOperators_OF_NetworkIdentification_sequence_of[1] = {
743   { &hf_charging_ase_networkOperators_item, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_charging_ase_NetworkIdentification },
744 };
745
746 static int
747 dissect_charging_ase_SEQUENCE_SIZE_1_maxNetworkOperators_OF_NetworkIdentification(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
748   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
749                                       SEQUENCE_SIZE_1_maxNetworkOperators_OF_NetworkIdentification_sequence_of, hf_index, ett_charging_ase_SEQUENCE_SIZE_1_maxNetworkOperators_OF_NetworkIdentification);
750
751   return offset;
752 }
753
754
755 static const ber_sequence_t StartCharging_sequence[] = {
756   { &hf_charging_ase_networkOperators, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_charging_ase_SEQUENCE_SIZE_1_maxNetworkOperators_OF_NetworkIdentification },
757   { &hf_charging_ase_extensions, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_charging_ase_SEQUENCE_SIZE_1_numOfExtensions_OF_ExtensionField },
758   { &hf_charging_ase_originationIdentification, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_charging_ase_ChargingReferenceIdentification },
759   { NULL, 0, 0, 0, NULL }
760 };
761
762 static int
763 dissect_charging_ase_StartCharging(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
764   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
765                                    StartCharging_sequence, hf_index, ett_charging_ase_StartCharging);
766
767   return offset;
768 }
769
770
771 static const asn_namedbit T_stopIndicators_bits[] = {
772   {  0, &hf_charging_ase_T_stopIndicators_callAttemptChargesApplicable, -1, -1, "callAttemptChargesApplicable", NULL },
773   { 0, NULL, 0, 0, NULL, NULL }
774 };
775
776 static int
777 dissect_charging_ase_T_stopIndicators(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
778   offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
779                                     T_stopIndicators_bits, hf_index, ett_charging_ase_T_stopIndicators,
780                                     NULL);
781
782   return offset;
783 }
784
785
786 static const ber_sequence_t StopCharging_sequence[] = {
787   { &hf_charging_ase_stopIndicators, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_charging_ase_T_stopIndicators },
788   { &hf_charging_ase_networkOperators, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_charging_ase_SEQUENCE_SIZE_1_maxNetworkOperators_OF_NetworkIdentification },
789   { &hf_charging_ase_extensions, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_charging_ase_SEQUENCE_SIZE_1_numOfExtensions_OF_ExtensionField },
790   { &hf_charging_ase_originationIdentification, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_charging_ase_ChargingReferenceIdentification },
791   { NULL, 0, 0, 0, NULL }
792 };
793
794 static int
795 dissect_charging_ase_StopCharging(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
796   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
797                                    StopCharging_sequence, hf_index, ett_charging_ase_StopCharging);
798
799   return offset;
800 }
801
802
803 const value_string charging_ase_ChargingMessageType_vals[] = {
804   {   0, "crgt" },
805   {   1, "aocrg" },
806   {   2, "crga" },
807   {   3, "start" },
808   {   4, "stop" },
809   { 0, NULL }
810 };
811
812 static const ber_choice_t ChargingMessageType_choice[] = {
813   {   0, &hf_charging_ase_crgt   , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_charging_ase_ChargingTariffInformation },
814   {   1, &hf_charging_ase_aocrg  , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_charging_ase_AddOnChargingInformation },
815   {   2, &hf_charging_ase_crga   , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_charging_ase_ChargingAcknowledgementInformation },
816   {   3, &hf_charging_ase_start  , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_charging_ase_StartCharging },
817   {   4, &hf_charging_ase_stop   , BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_charging_ase_StopCharging },
818   { 0, NULL, 0, 0, 0, NULL }
819 };
820
821 int
822 dissect_charging_ase_ChargingMessageType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
823   offset = dissect_ber_choice(actx, tree, tvb, offset,
824                                  ChargingMessageType_choice, hf_index, ett_charging_ase_ChargingMessageType,
825                                  NULL);
826
827   return offset;
828 }
829
830 /*--- PDUs ---*/
831
832 int dissect_charging_ase_ChargingMessageType_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
833   int offset = 0;
834   asn1_ctx_t asn1_ctx;
835   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
836   offset = dissect_charging_ase_ChargingMessageType(FALSE, tvb, offset, &asn1_ctx, tree, hf_charging_ase_charging_ase_ChargingMessageType_PDU);
837   return offset;
838 }
839
840
841 /*--- End of included file: packet-charging_ase-fn.c ---*/
842 #line 51 "../../asn1/charging_ase/packet-charging_ase-template.c"
843
844 static void
845 dissect_charging_ase(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
846 {
847     proto_item *it;
848     proto_tree *tr;
849
850     it=proto_tree_add_protocol_format(tree, proto_charging_ase, tvb, 0, -1, "Charging ASE");
851     tr=proto_item_add_subtree(it, ett_charging_ase);
852
853     if(tvb_reported_length(tvb)>0)
854     {
855         dissect_charging_ase_ChargingMessageType_PDU(tvb , pinfo, tr, NULL);
856     }
857 }
858
859 /* Register all the bits needed with the filtering engine */
860 void
861 proto_register_charging_ase(void)
862 {
863   /* List of fields */
864   static hf_register_info hf[] = {
865
866 /*--- Included file: packet-charging_ase-hfarr.c ---*/
867 #line 1 "../../asn1/charging_ase/packet-charging_ase-hfarr.c"
868     { &hf_charging_ase_charging_ase_ChargingMessageType_PDU,
869       { "ChargingMessageType", "charging_ase.ChargingMessageType",
870         FT_UINT32, BASE_DEC, VALS(charging_ase_ChargingMessageType_vals), 0,
871         NULL, HFILL }},
872     { &hf_charging_ase_crgt,
873       { "crgt", "charging_ase.crgt_element",
874         FT_NONE, BASE_NONE, NULL, 0,
875         "ChargingTariffInformation", HFILL }},
876     { &hf_charging_ase_aocrg,
877       { "aocrg", "charging_ase.aocrg_element",
878         FT_NONE, BASE_NONE, NULL, 0,
879         "AddOnChargingInformation", HFILL }},
880     { &hf_charging_ase_crga,
881       { "crga", "charging_ase.crga_element",
882         FT_NONE, BASE_NONE, NULL, 0,
883         "ChargingAcknowledgementInformation", HFILL }},
884     { &hf_charging_ase_start,
885       { "start", "charging_ase.start_element",
886         FT_NONE, BASE_NONE, NULL, 0,
887         "StartCharging", HFILL }},
888     { &hf_charging_ase_stop,
889       { "stop", "charging_ase.stop_element",
890         FT_NONE, BASE_NONE, NULL, 0,
891         "StopCharging", HFILL }},
892     { &hf_charging_ase_acknowledgementIndicators,
893       { "acknowledgementIndicators", "charging_ase.acknowledgementIndicators",
894         FT_BYTES, BASE_NONE, NULL, 0,
895         NULL, HFILL }},
896     { &hf_charging_ase_extensions,
897       { "extensions", "charging_ase.extensions",
898         FT_UINT32, BASE_DEC, NULL, 0,
899         "SEQUENCE_SIZE_1_numOfExtensions_OF_ExtensionField", HFILL }},
900     { &hf_charging_ase_extensions_item,
901       { "ExtensionField", "charging_ase.ExtensionField_element",
902         FT_NONE, BASE_NONE, NULL, 0,
903         NULL, HFILL }},
904     { &hf_charging_ase_originationIdentification,
905       { "originationIdentification", "charging_ase.originationIdentification_element",
906         FT_NONE, BASE_NONE, NULL, 0,
907         "ChargingReferenceIdentification", HFILL }},
908     { &hf_charging_ase_destinationIdentification,
909       { "destinationIdentification", "charging_ase.destinationIdentification_element",
910         FT_NONE, BASE_NONE, NULL, 0,
911         "ChargingReferenceIdentification", HFILL }},
912     { &hf_charging_ase_chargingControlIndicators,
913       { "chargingControlIndicators", "charging_ase.chargingControlIndicators",
914         FT_BYTES, BASE_NONE, NULL, 0,
915         NULL, HFILL }},
916     { &hf_charging_ase_addOncharge,
917       { "addOncharge", "charging_ase.addOncharge",
918         FT_UINT32, BASE_DEC, VALS(charging_ase_T_addOncharge_vals), 0,
919         NULL, HFILL }},
920     { &hf_charging_ase_addOnChargeCurrency,
921       { "addOnChargeCurrency", "charging_ase.addOnChargeCurrency_element",
922         FT_NONE, BASE_NONE, NULL, 0,
923         "CurrencyFactorScale", HFILL }},
924     { &hf_charging_ase_addOnChargePulse,
925       { "addOnChargePulse", "charging_ase.addOnChargePulse",
926         FT_BYTES, BASE_NONE, NULL, 0,
927         "PulseUnits", HFILL }},
928     { &hf_charging_ase_currency,
929       { "currency", "charging_ase.currency",
930         FT_UINT32, BASE_DEC, VALS(charging_ase_Currency_vals), 0,
931         NULL, HFILL }},
932     { &hf_charging_ase_chargingTariff,
933       { "chargingTariff", "charging_ase.chargingTariff",
934         FT_UINT32, BASE_DEC, VALS(charging_ase_T_chargingTariff_vals), 0,
935         NULL, HFILL }},
936     { &hf_charging_ase_tariffCurrency,
937       { "tariffCurrency", "charging_ase.tariffCurrency_element",
938         FT_NONE, BASE_NONE, NULL, 0,
939         NULL, HFILL }},
940     { &hf_charging_ase_tariffPulse,
941       { "tariffPulse", "charging_ase.tariffPulse_element",
942         FT_NONE, BASE_NONE, NULL, 0,
943         NULL, HFILL }},
944     { &hf_charging_ase_local,
945       { "local", "charging_ase.local",
946         FT_INT32, BASE_DEC, NULL, 0,
947         "INTEGER", HFILL }},
948     { &hf_charging_ase_global,
949       { "global", "charging_ase.global",
950         FT_OID, BASE_NONE, NULL, 0,
951         "OBJECT_IDENTIFIER", HFILL }},
952     { &hf_charging_ase_currencyFactorScale,
953       { "currencyFactorScale", "charging_ase.currencyFactorScale_element",
954         FT_NONE, BASE_NONE, NULL, 0,
955         NULL, HFILL }},
956     { &hf_charging_ase_tariffDuration,
957       { "tariffDuration", "charging_ase.tariffDuration",
958         FT_UINT32, BASE_DEC, NULL, 0,
959         NULL, HFILL }},
960     { &hf_charging_ase_subTariffControl,
961       { "subTariffControl", "charging_ase.subTariffControl",
962         FT_BYTES, BASE_NONE, NULL, 0,
963         NULL, HFILL }},
964     { &hf_charging_ase_pulseUnits,
965       { "pulseUnits", "charging_ase.pulseUnits",
966         FT_BYTES, BASE_NONE, NULL, 0,
967         NULL, HFILL }},
968     { &hf_charging_ase_chargeUnitTimeInterval,
969       { "chargeUnitTimeInterval", "charging_ase.chargeUnitTimeInterval",
970         FT_BYTES, BASE_NONE, NULL, 0,
971         NULL, HFILL }},
972     { &hf_charging_ase_currencyFactor,
973       { "currencyFactor", "charging_ase.currencyFactor",
974         FT_UINT32, BASE_DEC, NULL, 0,
975         NULL, HFILL }},
976     { &hf_charging_ase_currencyScale,
977       { "currencyScale", "charging_ase.currencyScale",
978         FT_INT32, BASE_DEC, NULL, 0,
979         NULL, HFILL }},
980     { &hf_charging_ase_type,
981       { "type", "charging_ase.type",
982         FT_UINT32, BASE_DEC, VALS(charging_ase_Code_vals), 0,
983         "Code", HFILL }},
984     { &hf_charging_ase_criticality,
985       { "criticality", "charging_ase.criticality",
986         FT_UINT32, BASE_DEC, VALS(charging_ase_CriticalityType_vals), 0,
987         "CriticalityType", HFILL }},
988     { &hf_charging_ase_value,
989       { "value", "charging_ase.value_element",
990         FT_NONE, BASE_NONE, NULL, 0,
991         NULL, HFILL }},
992     { &hf_charging_ase_networkOperators,
993       { "networkOperators", "charging_ase.networkOperators",
994         FT_UINT32, BASE_DEC, NULL, 0,
995         "SEQUENCE_SIZE_1_maxNetworkOperators_OF_NetworkIdentification", HFILL }},
996     { &hf_charging_ase_networkOperators_item,
997       { "NetworkIdentification", "charging_ase.NetworkIdentification",
998         FT_OID, BASE_NONE, NULL, 0,
999         NULL, HFILL }},
1000     { &hf_charging_ase_stopIndicators,
1001       { "stopIndicators", "charging_ase.stopIndicators",
1002         FT_BYTES, BASE_NONE, NULL, 0,
1003         NULL, HFILL }},
1004     { &hf_charging_ase_currentTariffCurrency,
1005       { "currentTariffCurrency", "charging_ase.currentTariffCurrency_element",
1006         FT_NONE, BASE_NONE, NULL, 0,
1007         "TariffCurrencyFormat", HFILL }},
1008     { &hf_charging_ase_tariffSwitchCurrency,
1009       { "tariffSwitchCurrency", "charging_ase.tariffSwitchCurrency_element",
1010         FT_NONE, BASE_NONE, NULL, 0,
1011         NULL, HFILL }},
1012     { &hf_charging_ase_nextTariffCurrency,
1013       { "nextTariffCurrency", "charging_ase.nextTariffCurrency_element",
1014         FT_NONE, BASE_NONE, NULL, 0,
1015         "TariffCurrencyFormat", HFILL }},
1016     { &hf_charging_ase_tariffSwitchoverTime,
1017       { "tariffSwitchoverTime", "charging_ase.tariffSwitchoverTime",
1018         FT_BYTES, BASE_NONE, NULL, 0,
1019         NULL, HFILL }},
1020     { &hf_charging_ase_communicationChargeSequenceCurrency,
1021       { "communicationChargeSequenceCurrency", "charging_ase.communicationChargeSequenceCurrency",
1022         FT_UINT32, BASE_DEC, NULL, 0,
1023         "SEQUENCE_SIZE_minCommunicationTariffNum_maxCommunicationTariffNum_OF_CommunicationChargeCurrency", HFILL }},
1024     { &hf_charging_ase_communicationChargeSequenceCurrency_item,
1025       { "CommunicationChargeCurrency", "charging_ase.CommunicationChargeCurrency_element",
1026         FT_NONE, BASE_NONE, NULL, 0,
1027         NULL, HFILL }},
1028     { &hf_charging_ase_tariffControlIndicators,
1029       { "tariffControlIndicators", "charging_ase.tariffControlIndicators",
1030         FT_BYTES, BASE_NONE, NULL, 0,
1031         NULL, HFILL }},
1032     { &hf_charging_ase_callAttemptChargeCurrency,
1033       { "callAttemptChargeCurrency", "charging_ase.callAttemptChargeCurrency_element",
1034         FT_NONE, BASE_NONE, NULL, 0,
1035         "CurrencyFactorScale", HFILL }},
1036     { &hf_charging_ase_callSetupChargeCurrency,
1037       { "callSetupChargeCurrency", "charging_ase.callSetupChargeCurrency_element",
1038         FT_NONE, BASE_NONE, NULL, 0,
1039         "CurrencyFactorScale", HFILL }},
1040     { &hf_charging_ase_currentTariffPulse,
1041       { "currentTariffPulse", "charging_ase.currentTariffPulse_element",
1042         FT_NONE, BASE_NONE, NULL, 0,
1043         "TariffPulseFormat", HFILL }},
1044     { &hf_charging_ase_tariffSwitchPulse,
1045       { "tariffSwitchPulse", "charging_ase.tariffSwitchPulse_element",
1046         FT_NONE, BASE_NONE, NULL, 0,
1047         NULL, HFILL }},
1048     { &hf_charging_ase_nextTariffPulse,
1049       { "nextTariffPulse", "charging_ase.nextTariffPulse_element",
1050         FT_NONE, BASE_NONE, NULL, 0,
1051         "TariffPulseFormat", HFILL }},
1052     { &hf_charging_ase_communicationChargeSequencePulse,
1053       { "communicationChargeSequencePulse", "charging_ase.communicationChargeSequencePulse",
1054         FT_UINT32, BASE_DEC, NULL, 0,
1055         "SEQUENCE_SIZE_minCommunicationTariffNum_maxCommunicationTariffNum_OF_CommunicationChargePulse", HFILL }},
1056     { &hf_charging_ase_communicationChargeSequencePulse_item,
1057       { "CommunicationChargePulse", "charging_ase.CommunicationChargePulse_element",
1058         FT_NONE, BASE_NONE, NULL, 0,
1059         NULL, HFILL }},
1060     { &hf_charging_ase_tariffControlIndicators_01,
1061       { "tariffControlIndicators", "charging_ase.tariffControlIndicators",
1062         FT_BYTES, BASE_NONE, NULL, 0,
1063         "T_tariffControlIndicators_01", HFILL }},
1064     { &hf_charging_ase_callAttemptChargePulse,
1065       { "callAttemptChargePulse", "charging_ase.callAttemptChargePulse",
1066         FT_BYTES, BASE_NONE, NULL, 0,
1067         "PulseUnits", HFILL }},
1068     { &hf_charging_ase_callSetupChargePulse,
1069       { "callSetupChargePulse", "charging_ase.callSetupChargePulse",
1070         FT_BYTES, BASE_NONE, NULL, 0,
1071         "PulseUnits", HFILL }},
1072     { &hf_charging_ase_networkIdentification,
1073       { "networkIdentification", "charging_ase.networkIdentification",
1074         FT_OID, BASE_NONE, NULL, 0,
1075         NULL, HFILL }},
1076     { &hf_charging_ase_referenceID,
1077       { "referenceID", "charging_ase.referenceID",
1078         FT_UINT32, BASE_DEC, NULL, 0,
1079         NULL, HFILL }},
1080     { &hf_charging_ase_T_acknowledgementIndicators_accepted,
1081       { "accepted", "charging_ase.accepted",
1082         FT_BOOLEAN, 8, NULL, 0x80,
1083         NULL, HFILL }},
1084     { &hf_charging_ase_ChargingControlIndicators_subscriberCharge,
1085       { "subscriberCharge", "charging_ase.subscriberCharge",
1086         FT_BOOLEAN, 8, NULL, 0x80,
1087         NULL, HFILL }},
1088     { &hf_charging_ase_ChargingControlIndicators_immediateChangeOfActuallyAppliedTariff,
1089       { "immediateChangeOfActuallyAppliedTariff", "charging_ase.immediateChangeOfActuallyAppliedTariff",
1090         FT_BOOLEAN, 8, NULL, 0x40,
1091         NULL, HFILL }},
1092     { &hf_charging_ase_ChargingControlIndicators_delayUntilStart,
1093       { "delayUntilStart", "charging_ase.delayUntilStart",
1094         FT_BOOLEAN, 8, NULL, 0x20,
1095         NULL, HFILL }},
1096     { &hf_charging_ase_T_stopIndicators_callAttemptChargesApplicable,
1097       { "callAttemptChargesApplicable", "charging_ase.callAttemptChargesApplicable",
1098         FT_BOOLEAN, 8, NULL, 0x80,
1099         NULL, HFILL }},
1100     { &hf_charging_ase_SubTariffControl_oneTimeCharge,
1101       { "oneTimeCharge", "charging_ase.oneTimeCharge",
1102         FT_BOOLEAN, 8, NULL, 0x80,
1103         NULL, HFILL }},
1104     { &hf_charging_ase_T_tariffControlIndicators_non_cyclicTariff,
1105       { "non-cyclicTariff", "charging_ase.non-cyclicTariff",
1106         FT_BOOLEAN, 8, NULL, 0x80,
1107         NULL, HFILL }},
1108     { &hf_charging_ase_T_tariffControlIndicators_01_non_cyclicTariff,
1109       { "non-cyclicTariff", "charging_ase.non-cyclicTariff",
1110         FT_BOOLEAN, 8, NULL, 0x80,
1111         NULL, HFILL }},
1112
1113 /*--- End of included file: packet-charging_ase-hfarr.c ---*/
1114 #line 74 "../../asn1/charging_ase/packet-charging_ase-template.c"
1115   };
1116
1117   /* List of subtrees */
1118     static gint *ett[] = {
1119     &ett_charging_ase,
1120
1121 /*--- Included file: packet-charging_ase-ettarr.c ---*/
1122 #line 1 "../../asn1/charging_ase/packet-charging_ase-ettarr.c"
1123     &ett_charging_ase_ChargingMessageType,
1124     &ett_charging_ase_ChargingAcknowledgementInformation,
1125     &ett_charging_ase_T_acknowledgementIndicators,
1126     &ett_charging_ase_SEQUENCE_SIZE_1_numOfExtensions_OF_ExtensionField,
1127     &ett_charging_ase_ChargingControlIndicators,
1128     &ett_charging_ase_AddOnChargingInformation,
1129     &ett_charging_ase_T_addOncharge,
1130     &ett_charging_ase_ChargingTariffInformation,
1131     &ett_charging_ase_T_chargingTariff,
1132     &ett_charging_ase_Code,
1133     &ett_charging_ase_CommunicationChargeCurrency,
1134     &ett_charging_ase_CommunicationChargePulse,
1135     &ett_charging_ase_CurrencyFactorScale,
1136     &ett_charging_ase_ExtensionField,
1137     &ett_charging_ase_StartCharging,
1138     &ett_charging_ase_SEQUENCE_SIZE_1_maxNetworkOperators_OF_NetworkIdentification,
1139     &ett_charging_ase_StopCharging,
1140     &ett_charging_ase_T_stopIndicators,
1141     &ett_charging_ase_SubTariffControl,
1142     &ett_charging_ase_TariffCurrency,
1143     &ett_charging_ase_TariffSwitchCurrency,
1144     &ett_charging_ase_TariffCurrencyFormat,
1145     &ett_charging_ase_SEQUENCE_SIZE_minCommunicationTariffNum_maxCommunicationTariffNum_OF_CommunicationChargeCurrency,
1146     &ett_charging_ase_T_tariffControlIndicators,
1147     &ett_charging_ase_TariffPulse,
1148     &ett_charging_ase_TariffSwitchPulse,
1149     &ett_charging_ase_TariffPulseFormat,
1150     &ett_charging_ase_SEQUENCE_SIZE_minCommunicationTariffNum_maxCommunicationTariffNum_OF_CommunicationChargePulse,
1151     &ett_charging_ase_T_tariffControlIndicators_01,
1152     &ett_charging_ase_ChargingReferenceIdentification,
1153
1154 /*--- End of included file: packet-charging_ase-ettarr.c ---*/
1155 #line 80 "../../asn1/charging_ase/packet-charging_ase-template.c"
1156         };
1157
1158   proto_charging_ase = proto_register_protocol(PNAME, PSNAME, PFNAME);
1159
1160   proto_register_field_array(proto_charging_ase, hf, array_length(hf));
1161   proto_register_subtree_array(ett, array_length(ett));
1162 }
1163
1164 /* The registration hand-off routine */
1165 void
1166 proto_reg_handoff_charging_ase(void)
1167 {
1168   charging_ase_handle = create_dissector_handle(dissect_charging_ase, proto_charging_ase);
1169 }
1170