Revert r49406: it's not ready for prime time yet
[metze/wireshark/wip.git] / asn1 / camel / camel.cnf
1 # camel.cnf
2 # camel conformation file
3 # Anders Broman 2007
4 # $Id$
5
6 #.IMPORT ../gsm_map/gsm_map-exp.cnf
7 #.IMPORT ../inap/inap-exp.cnf
8
9 #.MODULE
10 CS1-DataTypes  inap
11 CS2-datatypes  inap
12
13 #.ASSIGNED_OBJECT_IDENTIFIER classes
14 #.ASSIGNED_OBJECT_IDENTIFIER ros-InformationObjects
15 #.ASSIGNED_OBJECT_IDENTIFIER tc-Messages
16 #.ASSIGNED_OBJECT_IDENTIFIER tc-NotationExtensions
17 #.ASSIGNED_OBJECT_IDENTIFIER gprsSSF-gsmSCF-Operations
18 #.ASSIGNED_OBJECT_IDENTIFIER gsmSCF-gsmSRF-Operations
19 #.ASSIGNED_OBJECT_IDENTIFIER gsmSSF-gsmSCF-Operations
20 #.ASSIGNED_OBJECT_IDENTIFIER sms-Operations
21 #.ASSIGNED_OBJECT_IDENTIFIER gsmSSF-gsmSCF-Protocol
22 #.ASSIGNED_OBJECT_IDENTIFIER gsmSCF-gsmSRF-Protocol
23 #.ASSIGNED_OBJECT_IDENTIFIER operationcodes
24 #.ASSIGNED_OBJECT_IDENTIFIER datatypes
25 #.ASSIGNED_OBJECT_IDENTIFIER errortypes
26
27 #.OMIT_ASSIGNMENT Remote-Operations-Information-Objects
28 Bind
29 Unbind
30 #.END
31 #.OMIT_ASSIGNMENT
32 # Removed as they are giving 'defined but not used' warnings currently.
33 RejectProblem
34 TariffSwitchInterval
35 Priority
36 #.END
37
38 #.PDU_NEW
39 ERROR.&ParameterType
40 OPERATION.&ArgumentType
41 OPERATION.&ResultType
42 #.END
43
44
45 #.REGISTER
46 CAP-GPRS-ReferenceNumber        B "0.4.0.0.1.1.5.2" "id-CAP-GPRS-ReferenceNumber"
47 CAP-U-ABORT-REASON                      B "0.4.0.0.1.1.2.2" "id-CAP-U-ABORT-Reason"
48
49 #.NO_EMIT
50
51 #.TYPE_RENAME
52 ReturnResult/result/result              ResultArgument
53
54 #.FIELD_RENAME
55 Invoke/linkedId/present                 linkedIdPresent
56 Reject/problem/invoke                   invokeProblem
57 Reject/problem/returnError              returnErrorProblem
58 ReturnResult/result/result              resultArgument
59 Reject/problem/returnResult             problemReturnResult
60
61 PAR-cancelFailed/problem                par-cancelFailedProblem
62 CAMEL-FCIBillingChargingCharacteristics/fCIBCCCAMELsequence1            fci-fCIBCCCAMELsequence1
63 CAMEL-FCIGPRSBillingChargingCharacteristics/fCIBCCCAMELsequence1        fciGPRS-fCIBCCCAMELsequence1
64 CAMEL-FCISMSBillingChargingCharacteristics/fCIBCCCAMELsequence1         fciSMS-fCIBCCCAMELsequence1
65 EventSpecificInformationBCSM/oMidCallSpecificInfo/midCallEvents         omidCallEvents
66 EventSpecificInformationBCSM/tMidCallSpecificInfo/midCallEvents         tmidCallEvents
67 AudibleIndicator/tone           audibleIndicatorTone
68 GapIndicators/duration          gapIndicatorsDuration
69 InbandInfo/duration                     inbandInfoDuration
70 Tone/duration                           toneDuration
71 Burst/toneDuration                      burstToneDuration
72
73 EventSpecificInformationSMS/o-smsFailureSpecificInfo/failureCause smsfailureCause
74 EventSpecificInformationBCSM/routeSelectFailureSpecificInfo/failureCause routeSelectfailureCause
75 EventSpecificInformationSMS/t-smsFailureSpecificInfo/failureCause t-smsfailureCause
76
77 CAMEL-FCIBillingChargingCharacteristics/fCIBCCCAMELsequence1/partyToCharge fCIBCCCAMELsequence1partyToCharge
78 CAMEL-CallResult/timeDurationChargingResult/partyToCharge timeDurationChargingResultpartyToCharge
79
80 AOCSubsequent/tariffSwitchInterval aocSubsequent-tariffSwitchInterval
81 CAMEL-AChBillingChargingCharacteristics/timeDurationCharging/tariffSwitchInterval timeDurationCharging-tariffSwitchInterval
82 ApplyChargingGPRSArg/tariffSwitchInterval applyChargingGPRS-tariffSwitchInterval
83 TimeIfTariffSwitch/tariffSwitchInterval timeIfTariffSwitch-tariffSwitchInterval
84
85 # This table creates the value_sting to name Camel operation codes and errors
86 # in file packet-camel-table.c which is included in the template file
87 #
88 #.TABLE_HDR
89 /* CAMEL OPERATIONS */
90 const value_string camel_opr_code_strings[] = {
91 #.TABLE_BODY OPERATION
92         { %(&operationCode)s, "%(_ident)s" },
93 #.TABLE_FTR
94   { 0, NULL }
95 };
96 #.END
97
98 #.TABLE_HDR
99 /* CAMEL ERRORS */
100 static const value_string camel_err_code_string_vals[] = {
101 #.TABLE_BODY ERROR
102         { %(&errorCode)s, "%(_ident)s" },
103 #.TABLE_FTR
104   { 0, NULL }
105 };
106 #.END
107
108 # This table creates the switch() to branch on Camel operation codes and errors
109 # in file packet-camel-table2.c which is included in the template file
110 #
111 #.TABLE2_HDR
112 static int dissect_invokeData(proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ctx_t *actx) {
113   proto_item *cause;
114
115   switch(opcode){
116 #.TABLE2_BODY OPERATION.&ArgumentType
117     case %(&operationCode)s:  /* %(_ident)s */
118       offset= %(_argument_pdu)s(tvb, actx->pinfo , tree , NULL);
119       break;
120 #.TABLE2_FTR
121     default:
122       cause=proto_tree_add_text(tree, tvb, offset, -1, "Unknown invokeData blob");
123       proto_item_set_expert_flags(cause, PI_MALFORMED, PI_WARN);
124       expert_add_info_format(actx->pinfo, cause, PI_MALFORMED, PI_WARN, "Unknown invokeData %d",opcode);
125       /* todo call the asn.1 dissector */
126       break;
127   }
128   return offset;
129 }
130 #.END
131 #.TABLE2_HDR
132 static int dissect_returnResultData(proto_tree *tree, tvbuff_t *tvb, int offset,asn1_ctx_t *actx) {
133   proto_item *cause;
134
135   switch(opcode){
136 #.TABLE2_BODY OPERATION.&ResultType
137     case %(&operationCode)s:  /* %(_ident)s */
138           offset= %(_result_pdu)s(tvb, actx->pinfo , tree , NULL);
139       break;
140 #.TABLE2_FTR
141   default:
142     cause=proto_tree_add_text(tree, tvb, offset, -1, "Unknown returnResultData blob");
143     proto_item_set_expert_flags(cause, PI_MALFORMED, PI_WARN);
144     expert_add_info_format(actx->pinfo, cause, PI_MALFORMED, PI_WARN, "Unknown returnResultData %d",opcode);
145   }
146   return offset;
147 }
148 #.END
149 #.TABLE2_HDR
150 static int dissect_returnErrorData(proto_tree *tree, tvbuff_t *tvb, int offset,asn1_ctx_t *actx) {
151   proto_item *cause;
152
153   switch(errorCode) {
154 #.TABLE2_BODY ERROR.&ParameterType
155     case %(&errorCode)s:  /* %(_ident)s */
156       %(_parameter_pdu)s(tvb, actx->pinfo , tree , NULL);
157       break;
158 #.TABLE2_FTR
159   default:
160     cause=proto_tree_add_text(tree, tvb, offset, -1, "Unknown returnErrorData blob");
161     proto_item_set_expert_flags(cause, PI_MALFORMED, PI_WARN);
162     expert_add_info_format(actx->pinfo, cause, PI_MALFORMED, PI_WARN, "Unknown returnErrorData %d",errorCode);
163   }
164   return offset;
165 }
166 #.END
167 # ROS stuff here XXX change when TCAP is redone.
168
169 #.FN_BODY Code/local  VAL_PTR = &opcode
170
171   if (is_ExtensionField){
172         hf_index = hf_camel_extension_code_local;
173   }else if (camel_opcode_type == CAMEL_OPCODE_RETURN_ERROR){
174         hf_index = hf_camel_error_code_local;
175   }
176   %(DEFAULT_BODY)s
177   if (is_ExtensionField == FALSE){
178         if (camel_opcode_type == CAMEL_OPCODE_RETURN_ERROR){
179           errorCode = opcode;
180           col_append_str(actx->pinfo->cinfo, COL_INFO,
181               val_to_str(errorCode, camel_err_code_string_vals, "Unknown CAMEL error (%%u)"));
182           col_append_str(actx->pinfo->cinfo, COL_INFO, " ");
183           col_set_fence(actx->pinfo->cinfo, COL_INFO);
184         }else{
185           col_append_str(actx->pinfo->cinfo, COL_INFO,
186              val_to_str(opcode, camel_opr_code_strings, "Unknown CAMEL (%%u)"));
187           col_append_str(actx->pinfo->cinfo, COL_INFO, " ");
188           col_set_fence(actx->pinfo->cinfo, COL_INFO);
189         }
190         gp_camelsrt_info->opcode=opcode;
191   }
192 #.FN_HDR Invoke
193   camel_opcode_type=CAMEL_OPCODE_INVOKE;
194
195 #.FN_HDR ReturnResult
196   camel_opcode_type=CAMEL_OPCODE_RETURN_RESULT;
197
198 #.FN_HDR ReturnError
199   camel_opcode_type=CAMEL_OPCODE_RETURN_ERROR;
200
201 #.FN_HDR Reject
202   camel_opcode_type=CAMEL_OPCODE_REJECT;
203
204
205 #.FN_BODY Invoke/argument
206         offset = dissect_invokeData(tree, tvb, offset, actx);
207
208 #.FN_BODY ReturnResult/result/result
209         offset = dissect_returnResultData(tree, tvb, offset, actx);
210
211 #.FN_BODY ReturnError/parameter
212         offset = dissect_returnErrorData(tree, tvb, offset, actx);
213
214 # END ROS
215
216 #.FN_BODY InitialDPArgExtension
217
218 if((camel_ver == 2)||(camel_ver == 1)){
219         return dissect_camel_InitialDPArgExtensionV2(implicit_tag, tvb, offset, actx, tree, hf_index);
220 }
221
222 %(DEFAULT_BODY)s
223
224 #.FN_HDR ExtensionField
225         camel_obj_id = NULL;
226         is_ExtensionField =TRUE;
227
228 #.FN_PARS Code/global  FN_VARIANT = _str  VAL_PTR = &camel_obj_id
229
230 #.FN_BODY ExtensionField/value
231   /*XXX handle local form here */
232   if(camel_obj_id){
233     offset=call_ber_oid_callback(camel_obj_id, tvb, offset, actx->pinfo, tree);
234   }
235   is_ExtensionField = FALSE;
236
237 #----------------------------------------------------------------------------------------
238 #.FN_BODY CallingPartyNumber VAL_PTR = &parameter_tvb
239   tvbuff_t *parameter_tvb;
240   proto_tree *subtree;
241
242 %(DEFAULT_BODY)s
243
244  if (!parameter_tvb)
245         return offset;
246
247 subtree = proto_item_add_subtree(actx->created_item, ett_camel_callingpartynumber);
248 dissect_isup_calling_party_number_parameter(parameter_tvb, subtree, NULL);
249 #.END
250
251 #----------------------------------------------------------------------------------------
252 #.FN_BODY CalledPartyNumber VAL_PTR = &parameter_tvb
253   tvbuff_t *parameter_tvb;
254   proto_tree *subtree;
255
256 %(DEFAULT_BODY)s
257
258  if (!parameter_tvb)
259         return offset;
260
261  subtree = proto_item_add_subtree(actx->created_item, ett_camel_calledpartybcdnumber);
262  dissect_isup_called_party_number_parameter(parameter_tvb, subtree, NULL);
263 #.END
264
265 #----------------------------------------------------------------------------------------
266 #.FN_BODY LocationNumber VAL_PTR = &parameter_tvb
267   tvbuff_t *parameter_tvb;
268   proto_tree *subtree;
269
270 %(DEFAULT_BODY)s
271
272  if (!parameter_tvb)
273         return offset;
274
275 subtree = proto_item_add_subtree(actx->created_item, ett_camel_locationnumber);
276 dissect_isup_location_number_parameter(parameter_tvb, subtree, NULL);
277 #.END
278
279 #----------------------------------------------------------------------------------------
280 #.FN_BODY GenericNumber VAL_PTR = &parameter_tvb
281   tvbuff_t *parameter_tvb;
282
283 %(DEFAULT_BODY)s
284
285  if (!parameter_tvb)
286         return offset;
287
288 dissect_isup_generic_number_parameter(parameter_tvb, tree, NULL);
289 #.END
290
291 #----------------------------------------------------------------------------------------
292 #.FN_BODY Cause VAL_PTR = &parameter_tvb
293
294 tvbuff_t *parameter_tvb;
295 guint8 Cause_value;
296 proto_tree *subtree;
297
298 %(DEFAULT_BODY)s
299
300  if (!parameter_tvb)
301         return offset;
302  subtree = proto_item_add_subtree(actx->created_item, ett_camel_cause);
303
304  dissect_q931_cause_ie(parameter_tvb, 0, tvb_length_remaining(parameter_tvb,0), subtree, hf_camel_cause_indicator, &Cause_value, isup_parameter_type_value);
305 #.END
306
307 #----------------------------------------------------------------------------------------
308 #.FN_BODY RPCause VAL_PTR = &parameter_tvb
309
310 tvbuff_t *parameter_tvb;
311 guint8 Cause_value;
312 proto_tree *subtree;
313
314 %(DEFAULT_BODY)s
315
316  if (!parameter_tvb)
317         return offset;
318  subtree = proto_item_add_subtree(actx->created_item, ett_camel_RPcause);
319
320  dissect_RP_cause_ie(parameter_tvb, 0, tvb_length_remaining(parameter_tvb,0), subtree, hf_camel_RP_Cause, &Cause_value);
321 #.END
322
323 #----------------------------------------------------------------------------------------
324 #.FN_BODY DateAndTime
325
326
327 /*
328 * date_option = 1 european dd:mm:yyyy
329 * date_option = 2 american mm:dd:yyyy
330 */
331
332 /*
333 * Output should be HH:MM:SS;dd/mm/yyyy
334 * if european is selected, and HH:MM:SS;mm/dd/yyyy
335 * otherwise.
336 */
337
338   guint8 digit_pair;
339   guint8 i = 0, curr_offset;
340   char camel_time[CAMEL_DATE_AND_TIME_LEN];
341   char c[CAMEL_DATE_AND_TIME_LEN]; /*temporary container*/
342
343   /* 2 digits per octet, 7 octets total + 5 delimiters */
344
345   for (curr_offset = 0; curr_offset < 7 ; curr_offset++)
346   /*Loop to extract date*/
347   {
348       digit_pair = tvb_get_guint8(tvb, curr_offset);
349
350       proto_tree_add_uint(tree,
351                           hf_digit,
352                           tvb,
353                           curr_offset,
354                           1,
355                           digit_pair & 0x0F);
356
357       proto_tree_add_uint(tree,
358                           hf_digit,
359                           tvb,
360                           curr_offset,
361                           1,
362                           digit_pair >>4);
363
364
365       c[i] = camel_number_to_char( digit_pair & 0x0F);
366       i++;
367       c[i] = camel_number_to_char( digit_pair >>4);
368       i++;
369   }
370
371   /* Pretty print date */
372   /* XXX - Should we use sprintf here instead of assembling the string by
373    * hand? */
374
375   camel_time[0] = c[8];
376   camel_time[1] = c[9];
377   camel_time[2] = ':';
378   camel_time[3] = c[10];
379   camel_time[4] = c[11];
380   camel_time[5] = ':';
381   camel_time[6] = c[12];
382   camel_time[7] = c[13];
383   camel_time[8] = ';';
384   if ( EUROPEAN_DATE == date_format) /*european*/
385   {
386     camel_time[9] = c[6]; /*day*/
387     camel_time[10] = c[7];
388     camel_time[11] = '/';
389     camel_time[12] = c[4]; /*month*/
390     camel_time[13] = c[5];
391   }
392   else /*american*/
393   {
394     camel_time[9] = c[4]; /*month*/
395     camel_time[10] = c[5];
396     camel_time[11] = '/';
397     camel_time[12] = c[6]; /*day*/
398     camel_time[13] = c[7];
399   }
400   camel_time[14] = '/';
401   camel_time[15] = c[0];
402   camel_time[16] = c[1];
403   camel_time[17] = c[2];
404   camel_time[18] = c[3];
405
406   camel_time[CAMEL_DATE_AND_TIME_LEN - 1] = '\0';
407
408 /*start = 0, length = 7*/
409
410   proto_tree_add_string(tree,
411                       hf_index,
412                       tvb,
413                       0,
414                       7,
415                       camel_time);
416
417   return 7; /* 7  octets eaten*/
418 #.END
419
420 #----------------------------------------------------------------------------------------
421 #.FN_BODY BearerCapability/bearerCap VAL_PTR = &parameter_tvb
422  tvbuff_t       *parameter_tvb;
423
424 %(DEFAULT_BODY)s
425
426  if (!parameter_tvb)
427         return offset;
428
429  dissect_q931_bearer_capability_ie(parameter_tvb, 0, tvb_length_remaining(parameter_tvb,0), tree);
430 #.END
431
432 #----------------------------------------------------------------------------------------
433 #.FN_BODY OriginalCalledPartyID VAL_PTR = &parameter_tvb
434
435  tvbuff_t       *parameter_tvb;
436
437 %(DEFAULT_BODY)s
438
439  if (!parameter_tvb)
440         return offset;
441  dissect_isup_original_called_number_parameter(parameter_tvb, tree, NULL);
442 #.END
443
444 #----------------------------------------------------------------------------------------
445 #.FN_PARS  RedirectingPartyID
446
447   VAL_PTR = &parameter_tvb
448
449 #.FN_BODY RedirectingPartyID
450
451  tvbuff_t       *parameter_tvb;
452
453 %(DEFAULT_BODY)s
454
455  if (!parameter_tvb)
456         return offset;
457  dissect_isup_redirecting_number_parameter(parameter_tvb, tree, NULL);
458 #.END
459
460 #----------------------------------------------------------------------------------------
461 #.FN_PARS AccessPointName
462   VAL_PTR = &parameter_tvb
463
464 #.FN_BODY AccessPointName
465
466   tvbuff_t   *parameter_tvb;
467   proto_tree *subtree;
468
469 %(DEFAULT_BODY)s
470
471   if (!parameter_tvb)
472     return offset;
473   subtree = proto_item_add_subtree(actx->created_item, ett_camel_AccessPointName);
474   de_sm_apn(parameter_tvb, subtree, actx->pinfo, 0, tvb_length(parameter_tvb), NULL, 0);
475 #.END
476
477 #----------------------------------------------------------------------------------------
478 #.FN_BODY EndUserAddress/pDPTypeOrganization VAL_PTR = &parameter_tvb
479
480  tvbuff_t       *parameter_tvb;
481
482 %(DEFAULT_BODY)s
483
484  if (!parameter_tvb)
485         return offset;
486  PDPTypeOrganization  = (tvb_get_guint8(parameter_tvb,0) &0x0f);
487 #.END
488
489 #----------------------------------------------------------------------------------------
490 #.FN_BODY EndUserAddress/pDPTypeNumber VAL_PTR = &parameter_tvb
491
492  tvbuff_t       *parameter_tvb;
493  proto_tree *subtree;
494
495 %(DEFAULT_BODY)s
496
497  if (!parameter_tvb)
498         return offset;
499  PDPTypeNumber = tvb_get_guint8(parameter_tvb,0);
500  subtree = proto_item_add_subtree(actx->created_item, ett_camel_pdptypenumber);
501  switch (PDPTypeOrganization){
502  case 0: /* ETSI */
503         proto_tree_add_item(subtree, hf_camel_PDPTypeNumber_etsi, parameter_tvb, 0, 1, ENC_BIG_ENDIAN);
504         break;
505  case 1: /* IETF */
506         proto_tree_add_item(subtree, hf_camel_PDPTypeNumber_ietf, parameter_tvb, 0, 1, ENC_BIG_ENDIAN);
507         break;
508  default:
509         break;
510  }
511 #.END
512
513
514 #.FN_BODY EndUserAddress/pDPAddress VAL_PTR = &parameter_tvb
515
516  tvbuff_t       *parameter_tvb;
517  proto_tree *subtree;
518
519 %(DEFAULT_BODY)s
520
521  if (!parameter_tvb)
522         return offset;
523  subtree = proto_item_add_subtree(actx->created_item, ett_camel_pdptypenumber);
524  switch (PDPTypeOrganization){
525  case 0: /* ETSI */
526         break;
527  case 1: /* IETF */
528         switch(PDPTypeNumber){
529         case 0x21: /* IPv4 */
530                 proto_tree_add_item(subtree, hf_camel_PDPAddress_IPv4, parameter_tvb, 0, tvb_length(parameter_tvb), ENC_BIG_ENDIAN);
531                 break;
532         case 0x57: /* IPv6 */
533                 proto_tree_add_item(subtree, hf_camel_PDPAddress_IPv6, parameter_tvb, 0, tvb_length(parameter_tvb), ENC_NA);
534                 break;
535         default:
536                 break;
537         }
538  default:
539         break;
540
541  }
542 #.END
543
544 #----------------------------------------------------------------------------------------
545 #.FN_BODY LocationInformationGPRS/cellGlobalIdOrServiceAreaIdOrLAI 
546         proto_tree *subtree;
547         int start_offset;
548
549  start_offset = offset;
550 %(DEFAULT_BODY)s
551
552  subtree = proto_item_add_subtree(actx->created_item, ett_camel_pdptypenumber);
553
554  if (tvb_reported_length_remaining(tvb,start_offset) == 7){
555         dissect_gsm_map_CellGlobalIdOrServiceAreaIdFixedLength(TRUE, tvb, start_offset, actx, subtree, hf_camel_cellGlobalIdOrServiceAreaIdFixedLength);
556  }else{
557         dissect_gsm_map_LAIFixedLength(TRUE, tvb, start_offset, actx, subtree, hf_camel_locationAreaId);
558  }                      
559 #.END
560
561 #----------------------------------------------------------------------------------------
562 #.FN_BODY AChBillingChargingCharacteristics VAL_PTR = &parameter_tvb
563  tvbuff_t       *parameter_tvb;
564  proto_tree *subtree;
565
566 %(DEFAULT_BODY)s
567  if (!parameter_tvb)
568         return offset;
569  subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_AChBillingChargingCharacteristics);
570  if((camel_ver == 2)||(camel_ver == 1)){
571         return  dissect_camel_CAMEL_AChBillingChargingCharacteristicsV2(FALSE, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_AChBillingChargingCharacteristics);
572  }
573  dissect_camel_CAMEL_AChBillingChargingCharacteristics(FALSE, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_AChBillingChargingCharacteristics);
574
575 #.FN_BODY FCIBillingChargingCharacteristics VAL_PTR = &parameter_tvb
576  tvbuff_t       *parameter_tvb;
577  proto_tree *subtree; 
578
579 %(DEFAULT_BODY)s
580  if (!parameter_tvb)
581         return offset;
582  subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_FCIBillingChargingCharacteristics);
583  dissect_camel_CAMEL_FCIBillingChargingCharacteristics(FALSE, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_FCIBillingChargingCharacteristics);
584
585 #.FN_BODY FCIGPRSBillingChargingCharacteristics VAL_PTR = &parameter_tvb
586  tvbuff_t       *parameter_tvb; 
587  proto_tree *subtree; 
588
589 %(DEFAULT_BODY)s
590  if (!parameter_tvb)
591         return offset;
592  subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_FCIGPRSBillingChargingCharacteristics);
593  dissect_camel_CAMEL_FCIGPRSBillingChargingCharacteristics(FALSE, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_FCIGPRSBillingChargingCharacteristics);
594
595 #.FN_BODY FCISMSBillingChargingCharacteristics VAL_PTR = &parameter_tvb
596  tvbuff_t       *parameter_tvb;
597  proto_tree *subtree; 
598
599 %(DEFAULT_BODY)s
600  if (!parameter_tvb)
601         return offset; 
602  subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_FCISMSBillingChargingCharacteristics);
603  dissect_camel_CAMEL_FCISMSBillingChargingCharacteristics(FALSE, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_FCISMSBillingChargingCharacteristics);
604
605 #.FN_BODY SCIBillingChargingCharacteristics VAL_PTR = &parameter_tvb
606  tvbuff_t       *parameter_tvb;
607  proto_tree *subtree; 
608
609 %(DEFAULT_BODY)s
610  if (!parameter_tvb)
611         return offset;
612  subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_SCIBillingChargingCharacteristics);
613  dissect_camel_CAMEL_SCIBillingChargingCharacteristics(FALSE, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_SCIBillingChargingCharacteristics);
614
615 #.FN_BODY SCIGPRSBillingChargingCharacteristics VAL_PTR = &parameter_tvb
616  tvbuff_t       *parameter_tvb;
617  proto_tree *subtree; 
618
619 %(DEFAULT_BODY)s
620  if (!parameter_tvb)
621         return offset; 
622  subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_SCIGPRSBillingChargingCharacteristics);
623  dissect_camel_CAMEL_SCIGPRSBillingChargingCharacteristics(FALSE, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_SCIGPRSBillingChargingCharacteristics);
624
625 #.FN_BODY CallResult VAL_PTR = &parameter_tvb
626  tvbuff_t       *parameter_tvb; 
627  proto_tree *subtree; 
628
629 %(DEFAULT_BODY)s
630  if (!parameter_tvb)
631         return offset;
632  subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_CallResult);
633  dissect_camel_CAMEL_CallResult(FALSE, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_CallResult);
634
635 # V3 and V4 incompatibillity bug #1719
636 #.FN_BODY CAMEL-AChBillingChargingCharacteristics/timeDurationCharging/audibleIndicator
637   if (tvb_length_remaining(tvb,offset) < 2)
638         offset = dissect_camel_BOOLEAN(TRUE, tvb, offset, actx , tree, hf_camel_audibleIndicatorTone);
639   else
640 %(DEFAULT_BODY)s
641
642 #.FN_BODY CalledPartyBCDNumber VAL_PTR = &parameter_tvb
643 /* See 3GPP TS 29.078
644  * and 3GPP TS 24.008, section 10.5.4.7
645  * Indicates the Called Party Number, including service selection information.
646  * Refer to 3GPP TS 24.008 [9] for encoding.
647  * This data type carries only the 'type of number', 'numbering plan
648  * identification' and 'number digit' fields defined in 3GPP TS 24.008 [9];
649  * it does not carry the 'called party BCD number IEI' or 'length of called
650  * party BCD number contents'.
651  * In the context of the DestinationSubscriberNumber field in ConnectSMSArg or 
652  * InitialDPSMSArg, a CalledPartyBCDNumber may also contain an alphanumeric 
653  * character string. In this case, type-of-number '101'B is used, in accordance 
654  * with 3GPP TS 23.040 [6]. The address is coded in accordance with the 
655  * GSM 7-bit default alphabet definition and the SMS packing rules 
656  * as specified in 3GPP TS 23.038 [15] in this case.
657  */
658  tvbuff_t       *parameter_tvb; 
659  proto_tree *subtree; 
660
661 %(DEFAULT_BODY)s
662
663  if (!parameter_tvb)
664         return offset;
665  subtree = proto_item_add_subtree(actx->created_item, ett_camel_calledpartybcdnumber);
666  de_cld_party_bcd_num(parameter_tvb, subtree, actx->pinfo, 0, tvb_length(parameter_tvb), NULL, 0);
667
668 #.END
669
670 #.TYPE_ATTR
671 PDPTypeOrganization TYPE = FT_UINT8  DISPLAY = BASE_DEC  BITMASK = 0x0f STRINGS = VALS(gsm_map_PDP_Type_Organisation_vals)
672 DateAndTime     TYPE = FT_STRING DISPLAY = BASE_NONE
673 Code/local TYPE = FT_INT32  DISPLAY = BASE_DEC  STRINGS = VALS(camel_opr_code_strings)
674 ServiceInteractionIndicatorsTwo/holdTreatmentIndicator TYPE = FT_INT32  DISPLAY = BASE_DEC STRINGS = VALS(camel_holdTreatmentIndicator_values)
675 ServiceInteractionIndicatorsTwo/cwTreatmentIndicator TYPE = FT_INT32  DISPLAY = BASE_DEC STRINGS = VALS(camel_cwTreatmentIndicator_values)
676 ServiceInteractionIndicatorsTwo/ectTreatmentIndicator TYPE = FT_INT32  DISPLAY = BASE_DEC STRINGS = VALS(camel_ectTreatmentIndicator_values)
677 #.END