diff options
Diffstat (limited to 'epan/dissectors/asn1/camel/camel.cnf')
-rw-r--r-- | epan/dissectors/asn1/camel/camel.cnf | 707 |
1 files changed, 707 insertions, 0 deletions
diff --git a/epan/dissectors/asn1/camel/camel.cnf b/epan/dissectors/asn1/camel/camel.cnf new file mode 100644 index 0000000000..a298179964 --- /dev/null +++ b/epan/dissectors/asn1/camel/camel.cnf @@ -0,0 +1,707 @@ +# camel.cnf +# camel conformation file +# Anders Broman 2007 + +#.IMPORT ../gsm_map/gsm_map-exp.cnf +#.IMPORT ../inap/inap-exp.cnf + +#.MODULE +CS1-DataTypes inap +CS2-datatypes inap + +#.ASSIGNED_OBJECT_IDENTIFIER classes +#.ASSIGNED_OBJECT_IDENTIFIER ros-InformationObjects +#.ASSIGNED_OBJECT_IDENTIFIER tc-Messages +#.ASSIGNED_OBJECT_IDENTIFIER tc-NotationExtensions +#.ASSIGNED_OBJECT_IDENTIFIER gprsSSF-gsmSCF-Operations +#.ASSIGNED_OBJECT_IDENTIFIER gsmSCF-gsmSRF-Operations +#.ASSIGNED_OBJECT_IDENTIFIER gsmSSF-gsmSCF-Operations +#.ASSIGNED_OBJECT_IDENTIFIER sms-Operations +#.ASSIGNED_OBJECT_IDENTIFIER gsmSSF-gsmSCF-Protocol +#.ASSIGNED_OBJECT_IDENTIFIER gsmSCF-gsmSRF-Protocol +#.ASSIGNED_OBJECT_IDENTIFIER operationcodes +#.ASSIGNED_OBJECT_IDENTIFIER datatypes +#.ASSIGNED_OBJECT_IDENTIFIER errortypes + +#.OMIT_ASSIGNMENT Remote-Operations-Information-Objects +Bind +Unbind +#.END +#.OMIT_ASSIGNMENT +# Removed as they are giving 'defined but not used' warnings currently. +RejectProblem +TariffSwitchInterval +Priority +#.END + +#.PDU +ERROR.&ParameterType +OPERATION.&ArgumentType +OPERATION.&ResultType +#.END + + +#.REGISTER +CAP-GPRS-ReferenceNumber B "0.4.0.0.1.1.5.2" "id-CAP-GPRS-ReferenceNumber" +CAP-U-ABORT-REASON B "0.4.0.0.1.1.2.2" "id-CAP-U-ABORT-Reason" + +#.NO_EMIT ONLY_VALS +CAMEL-AChBillingChargingCharacteristicsV2 +ROS + +#.TYPE_RENAME +ReturnResult/result/result ResultArgument + +#.FIELD_RENAME +Invoke/linkedId/present linkedIdPresent +Reject/problem/invoke invokeProblem +Reject/problem/returnError returnErrorProblem +ReturnResult/result/result resultArgument +Reject/problem/returnResult problemReturnResult + +PAR-cancelFailed/problem par-cancelFailedProblem +CAMEL-FCIBillingChargingCharacteristics/fCIBCCCAMELsequence1 fci-fCIBCCCAMELsequence1 +CAMEL-FCIGPRSBillingChargingCharacteristics/fCIBCCCAMELsequence1 fciGPRS-fCIBCCCAMELsequence1 +CAMEL-FCISMSBillingChargingCharacteristics/fCIBCCCAMELsequence1 fciSMS-fCIBCCCAMELsequence1 +EventSpecificInformationBCSM/oMidCallSpecificInfo/midCallEvents omidCallEvents +EventSpecificInformationBCSM/tMidCallSpecificInfo/midCallEvents tmidCallEvents +AudibleIndicator/tone audibleIndicatorTone +GapIndicators/duration gapIndicatorsDuration +InbandInfo/duration inbandInfoDuration +Tone/duration toneDuration +Burst/toneDuration burstToneDuration + +EventSpecificInformationSMS/o-smsFailureSpecificInfo/failureCause smsfailureCause +EventSpecificInformationBCSM/routeSelectFailureSpecificInfo/failureCause routeSelectfailureCause +EventSpecificInformationSMS/t-smsFailureSpecificInfo/failureCause t-smsfailureCause + +CAMEL-FCIBillingChargingCharacteristics/fCIBCCCAMELsequence1/partyToCharge fCIBCCCAMELsequence1partyToCharge +CAMEL-CallResult/timeDurationChargingResult/partyToCharge timeDurationChargingResultpartyToCharge + +AOCSubsequent/tariffSwitchInterval aocSubsequent-tariffSwitchInterval +CAMEL-AChBillingChargingCharacteristics/timeDurationCharging/tariffSwitchInterval timeDurationCharging-tariffSwitchInterval +ApplyChargingGPRSArg/tariffSwitchInterval applyChargingGPRS-tariffSwitchInterval +TimeIfTariffSwitch/tariffSwitchInterval timeIfTariffSwitch-tariffSwitchInterval + +# This table creates the value_sting to name Camel operation codes and errors +# in file packet-camel-table.c which is included in the template file +# +#.TABLE_HDR +/* CAMEL OPERATIONS */ +const value_string camel_opr_code_strings[] = { +#.TABLE_BODY OPERATION + { %(&operationCode)s, "%(_ident)s" }, +#.TABLE_FTR + { 0, NULL } +}; +#.END + +#.TABLE_HDR +/* CAMEL ERRORS */ +static const value_string camel_err_code_string_vals[] = { +#.TABLE_BODY ERROR + { %(&errorCode)s, "%(_ident)s" }, +#.TABLE_FTR + { 0, NULL } +}; +#.END + +# This table creates the switch() to branch on Camel operation codes and errors +# in file packet-camel-table2.c which is included in the template file +# +#.TABLE2_HDR +static int dissect_invokeData(proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ctx_t *actx) { + + switch(opcode){ +#.TABLE2_BODY OPERATION.&ArgumentType + case %(&operationCode)s: /* %(_ident)s */ + offset= %(_argument_pdu)s(tvb, actx->pinfo , tree , NULL); + break; +#.TABLE2_FTR + default: + proto_tree_add_expert_format(tree, actx->pinfo, &ei_camel_unknown_invokeData, + tvb, offset, -1, "Unknown invokeData %d", opcode); + /* todo call the asn.1 dissector */ + break; + } + return offset; +} +#.END +#.TABLE2_HDR +static int dissect_returnResultData(proto_tree *tree, tvbuff_t *tvb, int offset,asn1_ctx_t *actx) { + + switch(opcode){ +#.TABLE2_BODY OPERATION.&ResultType + case %(&operationCode)s: /* %(_ident)s */ + offset= %(_result_pdu)s(tvb, actx->pinfo , tree , NULL); + break; +#.TABLE2_FTR + default: + proto_tree_add_expert_format(tree, actx->pinfo, &ei_camel_unknown_returnResultData, + tvb, offset, -1, "Unknown returnResultData %d",opcode); + } + return offset; +} +#.END +#.TABLE2_HDR +static int dissect_returnErrorData(proto_tree *tree, tvbuff_t *tvb, int offset,asn1_ctx_t *actx) { + + switch(errorCode) { +#.TABLE2_BODY ERROR.&ParameterType + case %(&errorCode)s: /* %(_ident)s */ + %(_parameter_pdu)s(tvb, actx->pinfo , tree , NULL); + break; +#.TABLE2_FTR + default: + proto_tree_add_expert_format(tree, actx->pinfo, &ei_camel_unknown_returnErrorData, + tvb, offset, -1, "Unknown returnErrorData %d",errorCode); + } + return offset; +} +#.END +# ROS stuff here XXX change when TCAP is redone. + +#.FN_BODY Code/local VAL_PTR = &opcode + + if (is_ExtensionField){ + hf_index = hf_camel_extension_code_local; + }else if (camel_opcode_type == CAMEL_OPCODE_RETURN_ERROR){ + hf_index = hf_camel_error_code_local; + } + %(DEFAULT_BODY)s + if (is_ExtensionField == FALSE){ + if (camel_opcode_type == CAMEL_OPCODE_RETURN_ERROR){ + errorCode = opcode; + col_append_str(actx->pinfo->cinfo, COL_INFO, + val_to_str(errorCode, camel_err_code_string_vals, "Unknown CAMEL error (%%u)")); + col_append_str(actx->pinfo->cinfo, COL_INFO, " "); + col_set_fence(actx->pinfo->cinfo, COL_INFO); + }else{ + col_append_str(actx->pinfo->cinfo, COL_INFO, + val_to_str(opcode, camel_opr_code_strings, "Unknown CAMEL (%%u)")); + col_append_str(actx->pinfo->cinfo, COL_INFO, " "); + col_set_fence(actx->pinfo->cinfo, COL_INFO); + } + gp_camelsrt_info->opcode=opcode; + } +#.FN_HDR Invoke + camel_opcode_type=CAMEL_OPCODE_INVOKE; + +#.FN_HDR ReturnResult + camel_opcode_type=CAMEL_OPCODE_RETURN_RESULT; + +#.FN_HDR ReturnError + camel_opcode_type=CAMEL_OPCODE_RETURN_ERROR; + +#.FN_HDR Reject + camel_opcode_type=CAMEL_OPCODE_REJECT; + + +#.FN_BODY Invoke/argument + offset = dissect_invokeData(tree, tvb, offset, actx); + +#.FN_BODY ReturnResult/result/result + offset = dissect_returnResultData(tree, tvb, offset, actx); + +#.FN_BODY ReturnError/parameter + offset = dissect_returnErrorData(tree, tvb, offset, actx); + +# END ROS + +#.FN_BODY InitialDPArgExtension + +if((camel_ver == 2)||(camel_ver == 1)){ + return dissect_camel_InitialDPArgExtensionV2(implicit_tag, tvb, offset, actx, tree, hf_index); +} + +%(DEFAULT_BODY)s + +#.FN_HDR ExtensionField + camel_obj_id = NULL; + is_ExtensionField =TRUE; + +#.FN_PARS Code/global FN_VARIANT = _str VAL_PTR = &camel_obj_id + +#.FN_BODY ExtensionField/value + /*XXX handle local form here */ + if(camel_obj_id){ + offset=call_ber_oid_callback(camel_obj_id, tvb, offset, actx->pinfo, tree, NULL); + } + is_ExtensionField = FALSE; + +#---------------------------------------------------------------------------------------- +#.FN_BODY CallingPartyNumber VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + proto_tree *subtree; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + +subtree = proto_item_add_subtree(actx->created_item, ett_camel_callingpartynumber); +dissect_isup_calling_party_number_parameter(parameter_tvb, subtree, NULL); +#.END + +#---------------------------------------------------------------------------------------- +#.FN_BODY CalledPartyNumber VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + proto_tree *subtree; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + + subtree = proto_item_add_subtree(actx->created_item, ett_camel_calledpartybcdnumber); + dissect_isup_called_party_number_parameter(parameter_tvb, subtree, NULL); +#.END + +#---------------------------------------------------------------------------------------- +#.FN_BODY LocationNumber VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + proto_tree *subtree; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + +subtree = proto_item_add_subtree(actx->created_item, ett_camel_locationnumber); +dissect_isup_location_number_parameter(parameter_tvb, subtree, NULL); +#.END + +#---------------------------------------------------------------------------------------- +#.FN_BODY GenericNumber VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + +dissect_isup_generic_number_parameter(parameter_tvb, actx->pinfo, tree, NULL); +#.END + +#---------------------------------------------------------------------------------------- +#.FN_BODY Cause VAL_PTR = ¶meter_tvb + +tvbuff_t *parameter_tvb; +guint8 Cause_value; +proto_tree *subtree; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + subtree = proto_item_add_subtree(actx->created_item, ett_camel_cause); + + dissect_q931_cause_ie(parameter_tvb, 0, tvb_reported_length_remaining(parameter_tvb,0), subtree, hf_camel_cause_indicator, &Cause_value, isup_parameter_type_value); +#.END + +#---------------------------------------------------------------------------------------- +#.FN_BODY RPCause VAL_PTR = ¶meter_tvb + +tvbuff_t *parameter_tvb; +guint8 Cause_value; +proto_tree *subtree; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + subtree = proto_item_add_subtree(actx->created_item, ett_camel_RPcause); + + dissect_RP_cause_ie(parameter_tvb, 0, tvb_reported_length_remaining(parameter_tvb,0), subtree, hf_camel_RP_Cause, &Cause_value); +#.END + +#---------------------------------------------------------------------------------------- +#.FN_BODY DateAndTime + + +/* +* date_option = 1 european dd:mm:yyyy +* date_option = 2 american mm:dd:yyyy +*/ + +/* +* Output should be HH:MM:SS;dd/mm/yyyy +* if european is selected, and HH:MM:SS;mm/dd/yyyy +* otherwise. +*/ + + guint8 digit_pair; + guint8 i = 0, curr_offset; + char camel_time[CAMEL_DATE_AND_TIME_LEN]; + char c[CAMEL_DATE_AND_TIME_LEN]; /*temporary container*/ + + /* 2 digits per octet, 7 octets total + 5 delimiters */ + + for (curr_offset = 0; curr_offset < 7 ; curr_offset++) + /*Loop to extract date*/ + { + digit_pair = tvb_get_guint8(tvb, curr_offset); + + proto_tree_add_uint(tree, + hf_digit, + tvb, + curr_offset, + 1, + digit_pair & 0x0F); + + proto_tree_add_uint(tree, + hf_digit, + tvb, + curr_offset, + 1, + digit_pair >>4); + + + c[i] = camel_number_to_char( digit_pair & 0x0F); + i++; + c[i] = camel_number_to_char( digit_pair >>4); + i++; + } + + /* Pretty print date */ + /* XXX - Should we use sprintf here instead of assembling the string by + * hand? */ + + camel_time[0] = c[8]; + camel_time[1] = c[9]; + camel_time[2] = ':'; + camel_time[3] = c[10]; + camel_time[4] = c[11]; + camel_time[5] = ':'; + camel_time[6] = c[12]; + camel_time[7] = c[13]; + camel_time[8] = ';'; + if ( EUROPEAN_DATE == date_format) /*european*/ + { + camel_time[9] = c[6]; /*day*/ + camel_time[10] = c[7]; + camel_time[11] = '/'; + camel_time[12] = c[4]; /*month*/ + camel_time[13] = c[5]; + } + else /*american*/ + { + camel_time[9] = c[4]; /*month*/ + camel_time[10] = c[5]; + camel_time[11] = '/'; + camel_time[12] = c[6]; /*day*/ + camel_time[13] = c[7]; + } + camel_time[14] = '/'; + camel_time[15] = c[0]; + camel_time[16] = c[1]; + camel_time[17] = c[2]; + camel_time[18] = c[3]; + + camel_time[CAMEL_DATE_AND_TIME_LEN - 1] = '\0'; + +/*start = 0, length = 7*/ + + proto_tree_add_string(tree, + hf_index, + tvb, + 0, + 7, + camel_time); + + return 7; /* 7 octets eaten*/ +#.END + +#---------------------------------------------------------------------------------------- +#.FN_BODY BearerCapability/bearerCap VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + + dissect_q931_bearer_capability_ie(parameter_tvb, 0, tvb_reported_length_remaining(parameter_tvb,0), tree); +#.END + +#---------------------------------------------------------------------------------------- +#.FN_BODY OriginalCalledPartyID VAL_PTR = ¶meter_tvb + + tvbuff_t *parameter_tvb; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + dissect_isup_original_called_number_parameter(parameter_tvb, actx->pinfo, tree, NULL); +#.END + +#---------------------------------------------------------------------------------------- +#.FN_PARS RedirectingPartyID + + VAL_PTR = ¶meter_tvb + +#.FN_BODY RedirectingPartyID + + tvbuff_t *parameter_tvb; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + dissect_isup_redirecting_number_parameter(parameter_tvb, tree, NULL); +#.END + +#---------------------------------------------------------------------------------------- +#.FN_PARS AccessPointName + VAL_PTR = ¶meter_tvb + +#.FN_BODY AccessPointName + + tvbuff_t *parameter_tvb; + proto_tree *subtree; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + subtree = proto_item_add_subtree(actx->created_item, ett_camel_AccessPointName); + de_sm_apn(parameter_tvb, subtree, actx->pinfo, 0, tvb_reported_length(parameter_tvb), NULL, 0); +#.END + +#---------------------------------------------------------------------------------------- +#.FN_BODY EndUserAddress/pDPTypeOrganization VAL_PTR = ¶meter_tvb + + tvbuff_t *parameter_tvb; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + PDPTypeOrganization = (tvb_get_guint8(parameter_tvb,0) &0x0f); +#.END + +#---------------------------------------------------------------------------------------- +#.FN_BODY EndUserAddress/pDPTypeNumber VAL_PTR = ¶meter_tvb + + tvbuff_t *parameter_tvb; + proto_tree *subtree; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + PDPTypeNumber = tvb_get_guint8(parameter_tvb,0); + subtree = proto_item_add_subtree(actx->created_item, ett_camel_pdptypenumber); + switch (PDPTypeOrganization){ + case 0: /* ETSI */ + proto_tree_add_item(subtree, hf_camel_PDPTypeNumber_etsi, parameter_tvb, 0, 1, ENC_BIG_ENDIAN); + break; + case 1: /* IETF */ + proto_tree_add_item(subtree, hf_camel_PDPTypeNumber_ietf, parameter_tvb, 0, 1, ENC_BIG_ENDIAN); + break; + default: + break; + } +#.END + + +#.FN_BODY EndUserAddress/pDPAddress VAL_PTR = ¶meter_tvb + + tvbuff_t *parameter_tvb; + proto_tree *subtree; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + subtree = proto_item_add_subtree(actx->created_item, ett_camel_pdptypenumber); + switch (PDPTypeOrganization){ + case 0: /* ETSI */ + break; + case 1: /* IETF */ + switch(PDPTypeNumber){ + case 0x21: /* IPv4 */ + proto_tree_add_item(subtree, hf_camel_PDPAddress_IPv4, parameter_tvb, 0, tvb_reported_length(parameter_tvb), ENC_BIG_ENDIAN); + break; + case 0x57: /* IPv6 */ + proto_tree_add_item(subtree, hf_camel_PDPAddress_IPv6, parameter_tvb, 0, tvb_reported_length(parameter_tvb), ENC_NA); + break; + default: + break; + } + default: + break; + + } +#.END + +#---------------------------------------------------------------------------------------- +#.FN_BODY LocationInformationGPRS/cellGlobalIdOrServiceAreaIdOrLAI + proto_tree *subtree; + int start_offset; + + start_offset = offset; +%(DEFAULT_BODY)s + + subtree = proto_item_add_subtree(actx->created_item, ett_camel_pdptypenumber); + + if (tvb_reported_length_remaining(tvb,start_offset) == 7){ + dissect_gsm_map_CellGlobalIdOrServiceAreaIdFixedLength(TRUE, tvb, start_offset, actx, subtree, hf_camel_cellGlobalIdOrServiceAreaIdFixedLength); + }else{ + dissect_gsm_map_LAIFixedLength(TRUE, tvb, start_offset, actx, subtree, hf_camel_locationAreaId); + } +#.END + +#---------------------------------------------------------------------------------------- +#.FN_BODY AChBillingChargingCharacteristics VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + proto_tree *subtree; + +%(DEFAULT_BODY)s + if (!parameter_tvb) + return offset; + subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_AChBillingChargingCharacteristics); + if((camel_ver == 2)||(camel_ver == 1)){ + return dissect_camel_CAMEL_AChBillingChargingCharacteristicsV2(FALSE, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_AChBillingChargingCharacteristics); + } + dissect_camel_CAMEL_AChBillingChargingCharacteristics(FALSE, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_AChBillingChargingCharacteristics); + +#.FN_BODY FCIBillingChargingCharacteristics VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + proto_tree *subtree; + +%(DEFAULT_BODY)s + if (!parameter_tvb) + return offset; + subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_FCIBillingChargingCharacteristics); + dissect_camel_CAMEL_FCIBillingChargingCharacteristics(FALSE, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_FCIBillingChargingCharacteristics); + +#.FN_BODY FCIGPRSBillingChargingCharacteristics VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + proto_tree *subtree; + +%(DEFAULT_BODY)s + if (!parameter_tvb) + return offset; + subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_FCIGPRSBillingChargingCharacteristics); + dissect_camel_CAMEL_FCIGPRSBillingChargingCharacteristics(FALSE, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_FCIGPRSBillingChargingCharacteristics); + +#.FN_BODY FCISMSBillingChargingCharacteristics VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + proto_tree *subtree; + +%(DEFAULT_BODY)s + if (!parameter_tvb) + return offset; + subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_FCISMSBillingChargingCharacteristics); + dissect_camel_CAMEL_FCISMSBillingChargingCharacteristics(FALSE, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_FCISMSBillingChargingCharacteristics); + +#.FN_BODY SCIBillingChargingCharacteristics VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + proto_tree *subtree; + +%(DEFAULT_BODY)s + if (!parameter_tvb) + return offset; + subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_SCIBillingChargingCharacteristics); + dissect_camel_CAMEL_SCIBillingChargingCharacteristics(FALSE, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_SCIBillingChargingCharacteristics); + +#.FN_BODY SCIGPRSBillingChargingCharacteristics VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + proto_tree *subtree; + +%(DEFAULT_BODY)s + if (!parameter_tvb) + return offset; + subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_SCIGPRSBillingChargingCharacteristics); + dissect_camel_CAMEL_SCIGPRSBillingChargingCharacteristics(FALSE, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_SCIGPRSBillingChargingCharacteristics); + +#.FN_BODY CallResult VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + proto_tree *subtree; + +%(DEFAULT_BODY)s + if (!parameter_tvb) + return offset; + subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_CallResult); + dissect_camel_CAMEL_CallResult(FALSE, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_CallResult); + +# V3 and V4 incompatibillity bug #1719 +#.FN_BODY CAMEL-AChBillingChargingCharacteristics/timeDurationCharging/audibleIndicator + if (tvb_reported_length_remaining(tvb,offset) < 2) + offset = dissect_camel_BOOLEAN(TRUE, tvb, offset, actx , tree, hf_camel_audibleIndicatorTone); + else +%(DEFAULT_BODY)s + +#.FN_BODY CalledPartyBCDNumber VAL_PTR = ¶meter_tvb +/* See 3GPP TS 29.078 + * and 3GPP TS 24.008, section 10.5.4.7 + * Indicates the Called Party Number, including service selection information. + * Refer to 3GPP TS 24.008 [9] for encoding. + * This data type carries only the 'type of number', 'numbering plan + * identification' and 'number digit' fields defined in 3GPP TS 24.008 [9]; + * it does not carry the 'called party BCD number IEI' or 'length of called + * party BCD number contents'. + * In the context of the DestinationSubscriberNumber field in ConnectSMSArg or + * InitialDPSMSArg, a CalledPartyBCDNumber may also contain an alphanumeric + * character string. In this case, type-of-number '101'B is used, in accordance + * with 3GPP TS 23.040 [6]. The address is coded in accordance with the + * GSM 7-bit default alphabet definition and the SMS packing rules + * as specified in 3GPP TS 23.038 [15] in this case. + */ + tvbuff_t *parameter_tvb; + proto_tree *subtree; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + subtree = proto_item_add_subtree(actx->created_item, ett_camel_calledpartybcdnumber); + de_cld_party_bcd_num(parameter_tvb, subtree, actx->pinfo, 0, tvb_reported_length(parameter_tvb), NULL, 0); + +#.END + +#.FN_BODY AdditionalCallingPartyNumber VAL_PTR = ¶meter_tvb +/* +* Digits {PARAMETERS-BOUND : bound} ::= OCTET STRING (SIZE( +* bound.&minDigitsLength .. bound.&maxDigitsLength)) +*-- Indicates the address signalling digits. +*-- Refer to ETSI EN 300 356 1 [23] Generic Number & Generic Digits parameters for encoding. +*-- The coding of the subfields 'NumberQualifier' in Generic Number and 'TypeOfDigits' in +*-- Generic Digits are irrelevant to the CAP; +*-- the ASN.1 tags are sufficient to identify the parameter. +*-- The ISUP format does not allow to exclude these subfields, +*-- therefore the value is network operator specific. +*-- +*-- The following parameters shall use Generic Number: +*-- - AdditionalCallingPartyNumber for InitialDP +* +*/ + tvbuff_t *parameter_tvb; + proto_tree *subtree; + + offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (!parameter_tvb) + return offset; + subtree = proto_item_add_subtree(actx->created_item, ett_camel_additionalcallingpartynumber); + dissect_isup_generic_number_parameter(parameter_tvb, actx->pinfo, subtree, NULL); + +# I don't know how to "access" the EstablishTemporaryConnectionArg-PDU which would have been cleaner. +#.FN_BODY EstablishTemporaryConnectionArg + + if(camel_ver==2){ + return dissect_camel_EstablishTemporaryConnectionArgV2(implicit_tag, tvb, offset, actx, tree, hf_index); + } +%(DEFAULT_BODY)s + +#.TYPE_ATTR +PDPTypeOrganization TYPE = FT_UINT8 DISPLAY = BASE_DEC BITMASK = 0x0f STRINGS = VALS(gsm_map_PDP_Type_Organisation_vals) +DateAndTime TYPE = FT_STRING DISPLAY = BASE_NONE +Code/local TYPE = FT_INT32 DISPLAY = BASE_DEC STRINGS = VALS(camel_opr_code_strings) +ServiceInteractionIndicatorsTwo/holdTreatmentIndicator TYPE = FT_INT32 DISPLAY = BASE_DEC STRINGS = VALS(camel_holdTreatmentIndicator_values) +ServiceInteractionIndicatorsTwo/cwTreatmentIndicator TYPE = FT_INT32 DISPLAY = BASE_DEC STRINGS = VALS(camel_cwTreatmentIndicator_values) +ServiceInteractionIndicatorsTwo/ectTreatmentIndicator TYPE = FT_INT32 DISPLAY = BASE_DEC STRINGS = VALS(camel_ectTreatmentIndicator_values) +#.END |