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