Witness: working witness.cnf
[wireshark-wip.git] / asn1 / camel / camel.cnf
blobccc49d24f53b80fa5643b6e007dcddb5ac92ce00
1 # camel.cnf
2 # camel conformation file
3 # Anders Broman 2007
4 # $Id$
6 #.IMPORT ../gsm_map/gsm_map-exp.cnf
7 #.IMPORT ../inap/inap-exp.cnf
9 #.MODULE
10 CS1-DataTypes  inap
11 CS2-datatypes  inap
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
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
38 #.PDU_NEW
39 ERROR.&ParameterType
40 OPERATION.&ArgumentType
41 OPERATION.&ResultType
42 #.END
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"
49 #.NO_EMIT
51 #.TYPE_RENAME
52 ReturnResult/result/result              ResultArgument
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
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
73 EventSpecificInformationSMS/o-smsFailureSpecificInfo/failureCause smsfailureCause
74 EventSpecificInformationBCSM/routeSelectFailureSpecificInfo/failureCause routeSelectfailureCause
75 EventSpecificInformationSMS/t-smsFailureSpecificInfo/failureCause t-smsfailureCause
77 CAMEL-FCIBillingChargingCharacteristics/fCIBCCCAMELsequence1/partyToCharge fCIBCCCAMELsequence1partyToCharge
78 CAMEL-CallResult/timeDurationChargingResult/partyToCharge timeDurationChargingResultpartyToCharge
80 AOCSubsequent/tariffSwitchInterval aocSubsequent-tariffSwitchInterval
81 CAMEL-AChBillingChargingCharacteristics/timeDurationCharging/tariffSwitchInterval timeDurationCharging-tariffSwitchInterval
82 ApplyChargingGPRSArg/tariffSwitchInterval applyChargingGPRS-tariffSwitchInterval
83 TimeIfTariffSwitch/tariffSwitchInterval timeIfTariffSwitch-tariffSwitchInterval
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
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 }
96 #.END
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 }
106 #.END
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
111 #.TABLE2_HDR
112 static int dissect_invokeData(proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ctx_t *actx) {
114   switch(opcode){
115 #.TABLE2_BODY OPERATION.&ArgumentType
116     case %(&operationCode)s:  /* %(_ident)s */
117       offset= %(_argument_pdu)s(tvb, actx->pinfo , tree , NULL);
118       break;
119 #.TABLE2_FTR
120     default:
121       proto_tree_add_expert_format(tree, actx->pinfo, &ei_camel_unknown_invokeData,
122                                    tvb, offset, -1, "Unknown invokeData %d", opcode);
123       /* todo call the asn.1 dissector */
124       break;
125   }
126   return offset;
128 #.END
129 #.TABLE2_HDR
130 static int dissect_returnResultData(proto_tree *tree, tvbuff_t *tvb, int offset,asn1_ctx_t *actx) {
132   switch(opcode){
133 #.TABLE2_BODY OPERATION.&ResultType
134     case %(&operationCode)s:  /* %(_ident)s */
135           offset= %(_result_pdu)s(tvb, actx->pinfo , tree , NULL);
136       break;
137 #.TABLE2_FTR
138   default:
139     proto_tree_add_expert_format(tree, actx->pinfo, &ei_camel_unknown_returnResultData,
140                                      tvb, offset, -1, "Unknown returnResultData %d",opcode);
141   }
142   return offset;
144 #.END
145 #.TABLE2_HDR
146 static int dissect_returnErrorData(proto_tree *tree, tvbuff_t *tvb, int offset,asn1_ctx_t *actx) {
148   switch(errorCode) {
149 #.TABLE2_BODY ERROR.&ParameterType
150     case %(&errorCode)s:  /* %(_ident)s */
151       %(_parameter_pdu)s(tvb, actx->pinfo , tree , NULL);
152       break;
153 #.TABLE2_FTR
154   default:
155     proto_tree_add_expert_format(tree, actx->pinfo, &ei_camel_unknown_returnErrorData,
156                                  tvb, offset, -1, "Unknown returnErrorData %d",errorCode);
157   }
158   return offset;
160 #.END
161 # ROS stuff here XXX change when TCAP is redone.
163 #.FN_BODY Code/local  VAL_PTR = &opcode
165   if (is_ExtensionField){
166         hf_index = hf_camel_extension_code_local;
167   }else if (camel_opcode_type == CAMEL_OPCODE_RETURN_ERROR){
168         hf_index = hf_camel_error_code_local;
169   }
170   %(DEFAULT_BODY)s
171   if (is_ExtensionField == FALSE){
172         if (camel_opcode_type == CAMEL_OPCODE_RETURN_ERROR){
173           errorCode = opcode;
174           col_append_str(actx->pinfo->cinfo, COL_INFO,
175               val_to_str(errorCode, camel_err_code_string_vals, "Unknown CAMEL error (%%u)"));
176           col_append_str(actx->pinfo->cinfo, COL_INFO, " ");
177           col_set_fence(actx->pinfo->cinfo, COL_INFO);
178         }else{
179           col_append_str(actx->pinfo->cinfo, COL_INFO,
180              val_to_str(opcode, camel_opr_code_strings, "Unknown CAMEL (%%u)"));
181           col_append_str(actx->pinfo->cinfo, COL_INFO, " ");
182           col_set_fence(actx->pinfo->cinfo, COL_INFO);
183         }
184         gp_camelsrt_info->opcode=opcode;
185   }
186 #.FN_HDR Invoke
187   camel_opcode_type=CAMEL_OPCODE_INVOKE;
189 #.FN_HDR ReturnResult
190   camel_opcode_type=CAMEL_OPCODE_RETURN_RESULT;
192 #.FN_HDR ReturnError
193   camel_opcode_type=CAMEL_OPCODE_RETURN_ERROR;
195 #.FN_HDR Reject
196   camel_opcode_type=CAMEL_OPCODE_REJECT;
199 #.FN_BODY Invoke/argument
200         offset = dissect_invokeData(tree, tvb, offset, actx);
202 #.FN_BODY ReturnResult/result/result
203         offset = dissect_returnResultData(tree, tvb, offset, actx);
205 #.FN_BODY ReturnError/parameter
206         offset = dissect_returnErrorData(tree, tvb, offset, actx);
208 # END ROS
210 #.FN_BODY InitialDPArgExtension
212 if((camel_ver == 2)||(camel_ver == 1)){
213         return dissect_camel_InitialDPArgExtensionV2(implicit_tag, tvb, offset, actx, tree, hf_index);
216 %(DEFAULT_BODY)s
218 #.FN_HDR ExtensionField
219         camel_obj_id = NULL;
220         is_ExtensionField =TRUE;
222 #.FN_PARS Code/global  FN_VARIANT = _str  VAL_PTR = &camel_obj_id
224 #.FN_BODY ExtensionField/value
225   /*XXX handle local form here */
226   if(camel_obj_id){
227     offset=call_ber_oid_callback(camel_obj_id, tvb, offset, actx->pinfo, tree, NULL);
228   }
229   is_ExtensionField = FALSE;
231 #----------------------------------------------------------------------------------------
232 #.FN_BODY CallingPartyNumber VAL_PTR = &parameter_tvb
233   tvbuff_t *parameter_tvb;
234   proto_tree *subtree;
236 %(DEFAULT_BODY)s
238  if (!parameter_tvb)
239         return offset;
241 subtree = proto_item_add_subtree(actx->created_item, ett_camel_callingpartynumber);
242 dissect_isup_calling_party_number_parameter(parameter_tvb, subtree, NULL);
243 #.END
245 #----------------------------------------------------------------------------------------
246 #.FN_BODY CalledPartyNumber VAL_PTR = &parameter_tvb
247   tvbuff_t *parameter_tvb;
248   proto_tree *subtree;
250 %(DEFAULT_BODY)s
252  if (!parameter_tvb)
253         return offset;
255  subtree = proto_item_add_subtree(actx->created_item, ett_camel_calledpartybcdnumber);
256  dissect_isup_called_party_number_parameter(parameter_tvb, subtree, NULL);
257 #.END
259 #----------------------------------------------------------------------------------------
260 #.FN_BODY LocationNumber VAL_PTR = &parameter_tvb
261   tvbuff_t *parameter_tvb;
262   proto_tree *subtree;
264 %(DEFAULT_BODY)s
266  if (!parameter_tvb)
267         return offset;
269 subtree = proto_item_add_subtree(actx->created_item, ett_camel_locationnumber);
270 dissect_isup_location_number_parameter(parameter_tvb, subtree, NULL);
271 #.END
273 #----------------------------------------------------------------------------------------
274 #.FN_BODY GenericNumber VAL_PTR = &parameter_tvb
275   tvbuff_t *parameter_tvb;
277 %(DEFAULT_BODY)s
279  if (!parameter_tvb)
280         return offset;
282 dissect_isup_generic_number_parameter(parameter_tvb, tree, NULL);
283 #.END
285 #----------------------------------------------------------------------------------------
286 #.FN_BODY Cause VAL_PTR = &parameter_tvb
288 tvbuff_t *parameter_tvb;
289 guint8 Cause_value;
290 proto_tree *subtree;
292 %(DEFAULT_BODY)s
294  if (!parameter_tvb)
295         return offset;
296  subtree = proto_item_add_subtree(actx->created_item, ett_camel_cause);
298  dissect_q931_cause_ie(parameter_tvb, 0, tvb_length_remaining(parameter_tvb,0), subtree, hf_camel_cause_indicator, &Cause_value, isup_parameter_type_value);
299 #.END
301 #----------------------------------------------------------------------------------------
302 #.FN_BODY RPCause VAL_PTR = &parameter_tvb
304 tvbuff_t *parameter_tvb;
305 guint8 Cause_value;
306 proto_tree *subtree;
308 %(DEFAULT_BODY)s
310  if (!parameter_tvb)
311         return offset;
312  subtree = proto_item_add_subtree(actx->created_item, ett_camel_RPcause);
314  dissect_RP_cause_ie(parameter_tvb, 0, tvb_length_remaining(parameter_tvb,0), subtree, hf_camel_RP_Cause, &Cause_value);
315 #.END
317 #----------------------------------------------------------------------------------------
318 #.FN_BODY DateAndTime
322 * date_option = 1 european dd:mm:yyyy
323 * date_option = 2 american mm:dd:yyyy
327 * Output should be HH:MM:SS;dd/mm/yyyy
328 * if european is selected, and HH:MM:SS;mm/dd/yyyy
329 * otherwise.
332   guint8 digit_pair;
333   guint8 i = 0, curr_offset;
334   char camel_time[CAMEL_DATE_AND_TIME_LEN];
335   char c[CAMEL_DATE_AND_TIME_LEN]; /*temporary container*/
337   /* 2 digits per octet, 7 octets total + 5 delimiters */
339   for (curr_offset = 0; curr_offset < 7 ; curr_offset++)
340   /*Loop to extract date*/
341   {
342       digit_pair = tvb_get_guint8(tvb, curr_offset);
344       proto_tree_add_uint(tree,
345                           hf_digit,
346                           tvb,
347                           curr_offset,
348                           1,
349                           digit_pair & 0x0F);
351       proto_tree_add_uint(tree,
352                           hf_digit,
353                           tvb,
354                           curr_offset,
355                           1,
356                           digit_pair >>4);
359       c[i] = camel_number_to_char( digit_pair & 0x0F);
360       i++;
361       c[i] = camel_number_to_char( digit_pair >>4);
362       i++;
363   }
365   /* Pretty print date */
366   /* XXX - Should we use sprintf here instead of assembling the string by
367    * hand? */
369   camel_time[0] = c[8];
370   camel_time[1] = c[9];
371   camel_time[2] = ':';
372   camel_time[3] = c[10];
373   camel_time[4] = c[11];
374   camel_time[5] = ':';
375   camel_time[6] = c[12];
376   camel_time[7] = c[13];
377   camel_time[8] = ';';
378   if ( EUROPEAN_DATE == date_format) /*european*/
379   {
380     camel_time[9] = c[6]; /*day*/
381     camel_time[10] = c[7];
382     camel_time[11] = '/';
383     camel_time[12] = c[4]; /*month*/
384     camel_time[13] = c[5];
385   }
386   else /*american*/
387   {
388     camel_time[9] = c[4]; /*month*/
389     camel_time[10] = c[5];
390     camel_time[11] = '/';
391     camel_time[12] = c[6]; /*day*/
392     camel_time[13] = c[7];
393   }
394   camel_time[14] = '/';
395   camel_time[15] = c[0];
396   camel_time[16] = c[1];
397   camel_time[17] = c[2];
398   camel_time[18] = c[3];
400   camel_time[CAMEL_DATE_AND_TIME_LEN - 1] = '\0';
402 /*start = 0, length = 7*/
404   proto_tree_add_string(tree,
405                       hf_index,
406                       tvb,
407                       0,
408                       7,
409                       camel_time);
411   return 7; /* 7  octets eaten*/
412 #.END
414 #----------------------------------------------------------------------------------------
415 #.FN_BODY BearerCapability/bearerCap VAL_PTR = &parameter_tvb
416  tvbuff_t       *parameter_tvb;
418 %(DEFAULT_BODY)s
420  if (!parameter_tvb)
421         return offset;
423  dissect_q931_bearer_capability_ie(parameter_tvb, 0, tvb_length_remaining(parameter_tvb,0), tree);
424 #.END
426 #----------------------------------------------------------------------------------------
427 #.FN_BODY OriginalCalledPartyID VAL_PTR = &parameter_tvb
429  tvbuff_t       *parameter_tvb;
431 %(DEFAULT_BODY)s
433  if (!parameter_tvb)
434         return offset;
435  dissect_isup_original_called_number_parameter(parameter_tvb, tree, NULL);
436 #.END
438 #----------------------------------------------------------------------------------------
439 #.FN_PARS  RedirectingPartyID
441   VAL_PTR = &parameter_tvb
443 #.FN_BODY RedirectingPartyID
445  tvbuff_t       *parameter_tvb;
447 %(DEFAULT_BODY)s
449  if (!parameter_tvb)
450         return offset;
451  dissect_isup_redirecting_number_parameter(parameter_tvb, tree, NULL);
452 #.END
454 #----------------------------------------------------------------------------------------
455 #.FN_PARS AccessPointName
456   VAL_PTR = &parameter_tvb
458 #.FN_BODY AccessPointName
460   tvbuff_t   *parameter_tvb;
461   proto_tree *subtree;
463 %(DEFAULT_BODY)s
465   if (!parameter_tvb)
466     return offset;
467   subtree = proto_item_add_subtree(actx->created_item, ett_camel_AccessPointName);
468   de_sm_apn(parameter_tvb, subtree, actx->pinfo, 0, tvb_length(parameter_tvb), NULL, 0);
469 #.END
471 #----------------------------------------------------------------------------------------
472 #.FN_BODY EndUserAddress/pDPTypeOrganization VAL_PTR = &parameter_tvb
474  tvbuff_t       *parameter_tvb;
476 %(DEFAULT_BODY)s
478  if (!parameter_tvb)
479         return offset;
480  PDPTypeOrganization  = (tvb_get_guint8(parameter_tvb,0) &0x0f);
481 #.END
483 #----------------------------------------------------------------------------------------
484 #.FN_BODY EndUserAddress/pDPTypeNumber VAL_PTR = &parameter_tvb
486  tvbuff_t       *parameter_tvb;
487  proto_tree *subtree;
489 %(DEFAULT_BODY)s
491  if (!parameter_tvb)
492         return offset;
493  PDPTypeNumber = tvb_get_guint8(parameter_tvb,0);
494  subtree = proto_item_add_subtree(actx->created_item, ett_camel_pdptypenumber);
495  switch (PDPTypeOrganization){
496  case 0: /* ETSI */
497         proto_tree_add_item(subtree, hf_camel_PDPTypeNumber_etsi, parameter_tvb, 0, 1, ENC_BIG_ENDIAN);
498         break;
499  case 1: /* IETF */
500         proto_tree_add_item(subtree, hf_camel_PDPTypeNumber_ietf, parameter_tvb, 0, 1, ENC_BIG_ENDIAN);
501         break;
502  default:
503         break;
505 #.END
508 #.FN_BODY EndUserAddress/pDPAddress VAL_PTR = &parameter_tvb
510  tvbuff_t       *parameter_tvb;
511  proto_tree *subtree;
513 %(DEFAULT_BODY)s
515  if (!parameter_tvb)
516         return offset;
517  subtree = proto_item_add_subtree(actx->created_item, ett_camel_pdptypenumber);
518  switch (PDPTypeOrganization){
519  case 0: /* ETSI */
520         break;
521  case 1: /* IETF */
522         switch(PDPTypeNumber){
523         case 0x21: /* IPv4 */
524                 proto_tree_add_item(subtree, hf_camel_PDPAddress_IPv4, parameter_tvb, 0, tvb_length(parameter_tvb), ENC_BIG_ENDIAN);
525                 break;
526         case 0x57: /* IPv6 */
527                 proto_tree_add_item(subtree, hf_camel_PDPAddress_IPv6, parameter_tvb, 0, tvb_length(parameter_tvb), ENC_NA);
528                 break;
529         default:
530                 break;
531         }
532  default:
533         break;
536 #.END
538 #----------------------------------------------------------------------------------------
539 #.FN_BODY LocationInformationGPRS/cellGlobalIdOrServiceAreaIdOrLAI 
540         proto_tree *subtree;
541         int start_offset;
543  start_offset = offset;
544 %(DEFAULT_BODY)s
546  subtree = proto_item_add_subtree(actx->created_item, ett_camel_pdptypenumber);
548  if (tvb_reported_length_remaining(tvb,start_offset) == 7){
549         dissect_gsm_map_CellGlobalIdOrServiceAreaIdFixedLength(TRUE, tvb, start_offset, actx, subtree, hf_camel_cellGlobalIdOrServiceAreaIdFixedLength);
550  }else{
551         dissect_gsm_map_LAIFixedLength(TRUE, tvb, start_offset, actx, subtree, hf_camel_locationAreaId);
552  }                      
553 #.END
555 #----------------------------------------------------------------------------------------
556 #.FN_BODY AChBillingChargingCharacteristics VAL_PTR = &parameter_tvb
557  tvbuff_t       *parameter_tvb;
558  proto_tree *subtree;
560 %(DEFAULT_BODY)s
561  if (!parameter_tvb)
562         return offset;
563  subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_AChBillingChargingCharacteristics);
564  if((camel_ver == 2)||(camel_ver == 1)){
565         return  dissect_camel_CAMEL_AChBillingChargingCharacteristicsV2(FALSE, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_AChBillingChargingCharacteristics);
567  dissect_camel_CAMEL_AChBillingChargingCharacteristics(FALSE, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_AChBillingChargingCharacteristics);
569 #.FN_BODY FCIBillingChargingCharacteristics VAL_PTR = &parameter_tvb
570  tvbuff_t       *parameter_tvb;
571  proto_tree *subtree; 
573 %(DEFAULT_BODY)s
574  if (!parameter_tvb)
575         return offset;
576  subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_FCIBillingChargingCharacteristics);
577  dissect_camel_CAMEL_FCIBillingChargingCharacteristics(FALSE, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_FCIBillingChargingCharacteristics);
579 #.FN_BODY FCIGPRSBillingChargingCharacteristics VAL_PTR = &parameter_tvb
580  tvbuff_t       *parameter_tvb; 
581  proto_tree *subtree; 
583 %(DEFAULT_BODY)s
584  if (!parameter_tvb)
585         return offset;
586  subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_FCIGPRSBillingChargingCharacteristics);
587  dissect_camel_CAMEL_FCIGPRSBillingChargingCharacteristics(FALSE, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_FCIGPRSBillingChargingCharacteristics);
589 #.FN_BODY FCISMSBillingChargingCharacteristics VAL_PTR = &parameter_tvb
590  tvbuff_t       *parameter_tvb;
591  proto_tree *subtree; 
593 %(DEFAULT_BODY)s
594  if (!parameter_tvb)
595         return offset; 
596  subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_FCISMSBillingChargingCharacteristics);
597  dissect_camel_CAMEL_FCISMSBillingChargingCharacteristics(FALSE, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_FCISMSBillingChargingCharacteristics);
599 #.FN_BODY SCIBillingChargingCharacteristics VAL_PTR = &parameter_tvb
600  tvbuff_t       *parameter_tvb;
601  proto_tree *subtree; 
603 %(DEFAULT_BODY)s
604  if (!parameter_tvb)
605         return offset;
606  subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_SCIBillingChargingCharacteristics);
607  dissect_camel_CAMEL_SCIBillingChargingCharacteristics(FALSE, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_SCIBillingChargingCharacteristics);
609 #.FN_BODY SCIGPRSBillingChargingCharacteristics VAL_PTR = &parameter_tvb
610  tvbuff_t       *parameter_tvb;
611  proto_tree *subtree; 
613 %(DEFAULT_BODY)s
614  if (!parameter_tvb)
615         return offset; 
616  subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_SCIGPRSBillingChargingCharacteristics);
617  dissect_camel_CAMEL_SCIGPRSBillingChargingCharacteristics(FALSE, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_SCIGPRSBillingChargingCharacteristics);
619 #.FN_BODY CallResult VAL_PTR = &parameter_tvb
620  tvbuff_t       *parameter_tvb; 
621  proto_tree *subtree; 
623 %(DEFAULT_BODY)s
624  if (!parameter_tvb)
625         return offset;
626  subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_CallResult);
627  dissect_camel_CAMEL_CallResult(FALSE, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_CallResult);
629 # V3 and V4 incompatibillity bug #1719
630 #.FN_BODY CAMEL-AChBillingChargingCharacteristics/timeDurationCharging/audibleIndicator
631   if (tvb_length_remaining(tvb,offset) < 2)
632         offset = dissect_camel_BOOLEAN(TRUE, tvb, offset, actx , tree, hf_camel_audibleIndicatorTone);
633   else
634 %(DEFAULT_BODY)s
636 #.FN_BODY CalledPartyBCDNumber VAL_PTR = &parameter_tvb
637 /* See 3GPP TS 29.078
638  * and 3GPP TS 24.008, section 10.5.4.7
639  * Indicates the Called Party Number, including service selection information.
640  * Refer to 3GPP TS 24.008 [9] for encoding.
641  * This data type carries only the 'type of number', 'numbering plan
642  * identification' and 'number digit' fields defined in 3GPP TS 24.008 [9];
643  * it does not carry the 'called party BCD number IEI' or 'length of called
644  * party BCD number contents'.
645  * In the context of the DestinationSubscriberNumber field in ConnectSMSArg or 
646  * InitialDPSMSArg, a CalledPartyBCDNumber may also contain an alphanumeric 
647  * character string. In this case, type-of-number '101'B is used, in accordance 
648  * with 3GPP TS 23.040 [6]. The address is coded in accordance with the 
649  * GSM 7-bit default alphabet definition and the SMS packing rules 
650  * as specified in 3GPP TS 23.038 [15] in this case.
651  */
652  tvbuff_t       *parameter_tvb; 
653  proto_tree *subtree; 
655 %(DEFAULT_BODY)s
657  if (!parameter_tvb)
658         return offset;
659  subtree = proto_item_add_subtree(actx->created_item, ett_camel_calledpartybcdnumber);
660  de_cld_party_bcd_num(parameter_tvb, subtree, actx->pinfo, 0, tvb_length(parameter_tvb), NULL, 0);
662 #.END
664 #.TYPE_ATTR
665 PDPTypeOrganization TYPE = FT_UINT8  DISPLAY = BASE_DEC  BITMASK = 0x0f STRINGS = VALS(gsm_map_PDP_Type_Organisation_vals)
666 DateAndTime     TYPE = FT_STRING DISPLAY = BASE_NONE
667 Code/local TYPE = FT_INT32  DISPLAY = BASE_DEC  STRINGS = VALS(camel_opr_code_strings)
668 ServiceInteractionIndicatorsTwo/holdTreatmentIndicator TYPE = FT_INT32  DISPLAY = BASE_DEC STRINGS = VALS(camel_holdTreatmentIndicator_values)
669 ServiceInteractionIndicatorsTwo/cwTreatmentIndicator TYPE = FT_INT32  DISPLAY = BASE_DEC STRINGS = VALS(camel_cwTreatmentIndicator_values)
670 ServiceInteractionIndicatorsTwo/ectTreatmentIndicator TYPE = FT_INT32  DISPLAY = BASE_DEC STRINGS = VALS(camel_ectTreatmentIndicator_values)
671 #.END