forked from osmocom/wireshark
New Camel dissector built with -X and -T option and origninal ASN1 files.
svn path=/trunk/; revision=22245
This commit is contained in:
parent
379d320b8b
commit
9f5e016fff
|
@ -2,7 +2,8 @@
|
|||
|
||||
PROTOCOL_NAME=camel
|
||||
DISSECTOR_FILES=packet-$(PROTOCOL_NAME).c packet-$(PROTOCOL_NAME).h
|
||||
ASN_FILE_LIST=camel.asn
|
||||
ROS_ASN= ../ros/Remote-Operations-Information-Objects.asn ../ros/Remote-Operations-Generic-ROS-PDUs.asn
|
||||
ASN_FILE_LIST=TCAPMessages.asn CAP-object-identifiers.asn CAP-classes.asn CAP-datatypes.asn CAP-errorcodes.asn CAP-errortypes.asn CAP-operationcodes.asn CAP-GPRS-ReferenceNumber.asn CAP-gsmSCF-gsmSRF-ops-args.asn CAP-gsmSSF-gsmSCF-ops-args.asn CAP-gprsSSF-gsmSCF-ops-args.asn CAP-SMS-ops-args.asn CAP-U-ABORT-Data.asn $(ROS_ASN)
|
||||
|
||||
all: generate_dissector
|
||||
|
||||
|
|
|
@ -8,7 +8,8 @@ UNIX2DOS=$(PERL) ../../tools/unix2dos.pl
|
|||
|
||||
PROTOCOL_NAME=camel
|
||||
DISSECTOR_FILES=packet-$(PROTOCOL_NAME).c packet-$(PROTOCOL_NAME).h
|
||||
ASN_FILE_LIST=camel.asn
|
||||
ROS_ASN= ../ros/Remote-Operations-Information-Objects.asn ../ros/Remote-Operations-Generic-ROS-PDUs.asn
|
||||
ASN_FILE_LIST=TCAPMessages.asn CAP-object-identifiers.asn CAP-classes.asn CAP-datatypes.asn CAP-errorcodes.asn CAP-errortypes.asn CAP-operationcodes.asn CAP-GPRS-ReferenceNumber.asn CAP-gsmSCF-gsmSRF-ops-args.asn CAP-gsmSSF-gsmSCF-ops-args.asn CAP-gprsSSF-gsmSCF-ops-args.asn CAP-SMS-ops-args.asn CAP-U-ABORT-Data.asn $(ROS_ASN)
|
||||
|
||||
all: generate_dissector
|
||||
|
||||
|
@ -16,7 +17,7 @@ generate_dissector: $(DISSECTOR_FILES)
|
|||
|
||||
$(DISSECTOR_FILES): ../../tools/asn2wrs.py $(ASN_FILE_LIST) packet-$(PROTOCOL_NAME)-template.c packet-$(PROTOCOL_NAME)-template.h camel.cnf
|
||||
!IFDEF PYTHON
|
||||
$(PYTHON) "../../tools/asn2wrs.py" -b -X -e -p $(PROTOCOL_NAME) -c camel.cnf -s packet-$(PROTOCOL_NAME)-template $(ASN_FILE_LIST)
|
||||
$(PYTHON) "../../tools/asn2wrs.py" -b -X -T -L -e -k -p $(PROTOCOL_NAME) -c camel.cnf -s packet-$(PROTOCOL_NAME)-template $(ASN_FILE_LIST)
|
||||
!ELSE
|
||||
@echo Error: You need Python to use asn2wrs.py
|
||||
@exit 1
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
-- Generated by Asnp, the pretty-printer of France Telecom R&D (http://asn1.elibel.tm.fr/asnp/)
|
||||
TCAPMessages {itu-t recommendation q 773 modules(2) messages(1) version3(3)}
|
||||
DEFINITIONS IMPLICIT TAGS ::=
|
||||
BEGIN
|
||||
-- This is a dummy asn1 file to be replacet when everthing is in place...
|
||||
-- EXPORTS everything
|
||||
-- Transaction Portion fields.
|
||||
IMPORTS
|
||||
ROS{}, InvokeId
|
||||
FROM Remote-Operations-Generic-ROS-PDUs {joint-iso-itu-t
|
||||
remote-operations(4) generic-ROS-PDUs(6) version1(0)}
|
||||
OPERATION
|
||||
FROM Remote-Operations-Information-Objects {joint-iso-itu-t
|
||||
remote-operations(4) informationObjects(5) version1(0)};
|
||||
|
||||
|
||||
TCInvokeIdSet ::= InvokeId(WITH COMPONENTS {
|
||||
present (-128..127)
|
||||
})
|
||||
|
||||
END -- TCAPMessages
|
|
@ -1,56 +1,201 @@
|
|||
# camel.cnf
|
||||
# camel conformation file
|
||||
|
||||
# $Id$
|
||||
|
||||
#.MODULE_IMPORT
|
||||
MAP-CommonDataTypes gsm_map
|
||||
MAP-MS-DataTypes gsm_map
|
||||
MAP-CH-DataTypes gsm_map
|
||||
|
||||
#.INCLUDE ../gsmmap/gsm_map-exp.cnf
|
||||
#.INCLUDE ../inap/inap-exp.cnf
|
||||
|
||||
#.MODULE
|
||||
CS1-DataTypes inap
|
||||
CS2-datatypes inap
|
||||
|
||||
#.PDU
|
||||
|
||||
#.OMIT_ASSIGNMENT Remote-Operations-Information-Objects
|
||||
Bind
|
||||
Unbind
|
||||
#.END
|
||||
|
||||
#.REGISTER
|
||||
CAP-GPRS-ReferenceNumber B "0.4.0.0.1.1.5.2" "id-CAP-GPRS-ReferenceNumber"
|
||||
|
||||
#.NO_EMIT
|
||||
|
||||
#.TYPE_RENAME
|
||||
ReturnResult/result/result ResultArgument
|
||||
|
||||
#.FIELD_RENAME
|
||||
#----------------------------------------------------------------------------------------
|
||||
#.PDU
|
||||
Component
|
||||
#----------------------------------------------------------------------------------------
|
||||
#.FN_BODY InvokeParameter
|
||||
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
|
||||
|
||||
|
||||
#.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 */
|
||||
const value_string camel_err_code_string_vals[] = {
|
||||
#.TABLE_BODY ERROR
|
||||
{ %(&errorCode)s, "%(_ident)s" },
|
||||
#.TABLE_FTR
|
||||
{ 0, NULL }
|
||||
};
|
||||
#.END
|
||||
|
||||
#.TABLE_HDR
|
||||
static int dissect_invokeData(proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ctx_t *actx) {
|
||||
proto_item *cause;
|
||||
|
||||
switch(opcode){
|
||||
#.TABLE_BODY OPERATION.&ArgumentType
|
||||
case %(&operationCode)s: /* %(_ident)s */
|
||||
offset= %(_argument_fn)s(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
#.TABLE_FTR
|
||||
cause=proto_tree_add_text(tree, tvb, offset, -1, "Unknown invokeData blob");
|
||||
proto_item_set_expert_flags(cause, PI_MALFORMED, PI_WARN);
|
||||
expert_add_info_format(actx->pinfo, cause, PI_MALFORMED, PI_WARN, "Unknown invokeData %d",opcode);
|
||||
/* todo call the asn.1 dissector */
|
||||
}
|
||||
return offset;
|
||||
}
|
||||
#.END
|
||||
#.TABLE_HDR
|
||||
static int dissect_returnResultData(proto_tree *tree, tvbuff_t *tvb, int offset,asn1_ctx_t *actx) {
|
||||
proto_item *cause;
|
||||
|
||||
switch(opcode){
|
||||
#.TABLE_BODY OPERATION.&ResultType
|
||||
case %(&operationCode)s: /* %(_ident)s */
|
||||
offset= %(_result_fn)s(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
#.TABLE_FTR
|
||||
default:
|
||||
cause=proto_tree_add_text(tree, tvb, offset, -1, "Unknown returnResultData blob");
|
||||
proto_item_set_expert_flags(cause, PI_MALFORMED, PI_WARN);
|
||||
expert_add_info_format(actx->pinfo, cause, PI_MALFORMED, PI_WARN, "Unknown returnResultData %d",opcode);
|
||||
}
|
||||
return offset;
|
||||
}
|
||||
#.END
|
||||
#.TABLE_HDR
|
||||
static int dissect_returnErrorData(proto_tree *tree, tvbuff_t *tvb, int offset,asn1_ctx_t *actx) {
|
||||
proto_item *cause;
|
||||
|
||||
switch(errorCode) {
|
||||
#.TABLE_BODY ERROR.&ParameterType
|
||||
case %(&errorCode)s: /* %(_ident)s */
|
||||
%(_parameter_fn)s(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
#.TABLE_FTR
|
||||
default:
|
||||
cause=proto_tree_add_text(tree, tvb, offset, -1, "Unknown returnErrorData blob");
|
||||
proto_item_set_expert_flags(cause, PI_MALFORMED, PI_WARN);
|
||||
expert_add_info_format(actx->pinfo, cause, PI_MALFORMED, PI_WARN, "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;
|
||||
if (check_col(actx->pinfo->cinfo, COL_INFO)){
|
||||
col_append_fstr(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{
|
||||
if (check_col(actx->pinfo->cinfo, COL_INFO)){
|
||||
col_append_fstr(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 ReturnResultParameter
|
||||
#.FN_BODY ReturnResult/result/result
|
||||
offset = dissect_returnResultData(tree, tvb, offset, actx);
|
||||
|
||||
#----------------------------------------------------------------------------------------
|
||||
#.FN_BODY ReturnErrorParameter
|
||||
#.FN_BODY ReturnError/parameter
|
||||
offset = dissect_returnErrorData(tree, tvb, offset, actx);
|
||||
|
||||
#----------------------------------------------------------------------------------------
|
||||
#.FN_PARS CAMELOperationLocalvalue
|
||||
# END ROS
|
||||
|
||||
VAL_PTR = &opcode
|
||||
#.FN_HDR ExtensionField
|
||||
camel_obj_id = NULL;
|
||||
is_ExtensionField =TRUE;
|
||||
|
||||
#.FN_BODY CAMELOperationLocalvalue
|
||||
#.FN_PARS Code/global FN_VARIANT = _str VAL_PTR = &camel_obj_id
|
||||
|
||||
%(DEFAULT_BODY)s
|
||||
if (check_col(actx->pinfo->cinfo, COL_INFO)){
|
||||
col_append_fstr(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);
|
||||
#.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);
|
||||
}
|
||||
gp_camelsrt_info->opcode=opcode;
|
||||
is_ExtensionField = FALSE;
|
||||
|
||||
#----------------------------------------------------------------------------------------
|
||||
#.FN_PARS CAMELLocalErrorcode
|
||||
|
||||
VAL_PTR = &errorCode
|
||||
|
@ -85,53 +230,8 @@ Component
|
|||
offset += len;
|
||||
|
||||
#.END
|
||||
|
||||
#----------------------------------------------------------------------------------------
|
||||
#.FN_PARS ISDN-AddressString
|
||||
VAL_PTR = ¶meter_tvb
|
||||
|
||||
#.FN_BODY ISDN-AddressString
|
||||
|
||||
tvbuff_t *parameter_tvb;
|
||||
char *digit_str;
|
||||
proto_item *item;
|
||||
proto_tree *subtree;
|
||||
|
||||
%(DEFAULT_BODY)s
|
||||
|
||||
if (!parameter_tvb)
|
||||
return offset;
|
||||
item = get_ber_last_created_item();
|
||||
subtree = proto_item_add_subtree(item, ett_camel_isdn_address_string);
|
||||
|
||||
proto_tree_add_item(subtree, hf_camel_addr_extension, parameter_tvb, 0,1,FALSE);
|
||||
|
||||
proto_tree_add_item(subtree, hf_camel_addr_natureOfAddressIndicator, parameter_tvb, 0,1,FALSE);
|
||||
proto_tree_add_item(subtree, hf_camel_addr_numberingPlanInd, parameter_tvb, 0,1,FALSE);
|
||||
digit_str = unpack_digits(parameter_tvb, 1);
|
||||
|
||||
proto_tree_add_string(subtree, hf_camel_addr_digits, parameter_tvb, 1, -1, digit_str);
|
||||
#.END
|
||||
|
||||
#----------------------------------------------------------------------------------------
|
||||
#.FN_PARS CallresultoctetPDU
|
||||
VAL_PTR = ¶meter_tvb
|
||||
|
||||
#.FN_BODY CallresultoctetPDU
|
||||
tvbuff_t *parameter_tvb;
|
||||
|
||||
%(DEFAULT_BODY)s
|
||||
if (!parameter_tvb)
|
||||
return offset;
|
||||
dissect_camel_CAMEL_CallResult(implicit_tag, parameter_tvb, 0, actx, tree, -1);
|
||||
|
||||
#.END
|
||||
|
||||
#----------------------------------------------------------------------------------------
|
||||
#.FN_PARS Cause
|
||||
VAL_PTR = &camel_tvb
|
||||
|
||||
#.FN_BODY Cause
|
||||
#.FN_BODY Cause VAL_PTR = &camel_tvb
|
||||
|
||||
tvbuff_t *camel_tvb;
|
||||
guint8 Cause_value;
|
||||
|
@ -144,30 +244,8 @@ tvbuff_t *parameter_tvb;
|
|||
|
||||
return offset;
|
||||
#.END
|
||||
|
||||
#----------------------------------------------------------------------------------------
|
||||
#.FN_PARS Q850Cause
|
||||
VAL_PTR = &camel_tvb
|
||||
|
||||
#.FN_BODY Q850Cause
|
||||
|
||||
tvbuff_t *camel_tvb;
|
||||
guint8 Cause_value;
|
||||
|
||||
%(DEFAULT_BODY)s
|
||||
|
||||
if (camel_tvb)
|
||||
dissect_q931_cause_ie(camel_tvb, 0, tvb_length_remaining(camel_tvb,0), tree, hf_camel_cause_indicator, &Cause_value);
|
||||
|
||||
|
||||
return offset;
|
||||
#.END
|
||||
|
||||
#----------------------------------------------------------------------------------------
|
||||
#.FN_PARS RPCause
|
||||
VAL_PTR = &camel_tvb
|
||||
|
||||
#.FN_BODY RPCause
|
||||
#.FN_BODY RPCause VAL_PTR = &camel_tvb
|
||||
|
||||
tvbuff_t *camel_tvb;
|
||||
guint8 Cause_value;
|
||||
|
@ -278,12 +356,7 @@ tvbuff_t *parameter_tvb;
|
|||
#.END
|
||||
|
||||
#----------------------------------------------------------------------------------------
|
||||
#.FN_PARS BearerCap
|
||||
|
||||
VAL_PTR = ¶meter_tvb
|
||||
|
||||
#.FN_BODY BearerCap
|
||||
|
||||
#.FN_BODY BearerCapability/bearerCap VAL_PTR = ¶meter_tvb
|
||||
tvbuff_t *parameter_tvb;
|
||||
|
||||
%(DEFAULT_BODY)s
|
||||
|
@ -295,28 +368,7 @@ tvbuff_t *parameter_tvb;
|
|||
#.END
|
||||
|
||||
#----------------------------------------------------------------------------------------
|
||||
#.FN_PARS RedirectionInformation
|
||||
|
||||
VAL_PTR = ¶meter_tvb
|
||||
|
||||
#.FN_BODY RedirectionInformation
|
||||
|
||||
tvbuff_t *parameter_tvb;
|
||||
|
||||
%(DEFAULT_BODY)s
|
||||
|
||||
if (!parameter_tvb)
|
||||
return offset;
|
||||
|
||||
dissect_isup_redirection_information_parameter(parameter_tvb, tree, NULL);
|
||||
#.END
|
||||
|
||||
#----------------------------------------------------------------------------------------
|
||||
#.FN_PARS OriginalCalledPartyID
|
||||
|
||||
VAL_PTR = ¶meter_tvb
|
||||
|
||||
#.FN_BODY OriginalCalledPartyID
|
||||
#.FN_BODY OriginalCalledPartyID VAL_PTR = ¶meter_tvb
|
||||
|
||||
tvbuff_t *parameter_tvb;
|
||||
|
||||
|
@ -343,50 +395,9 @@ tvbuff_t *parameter_tvb;
|
|||
dissect_isup_redirecting_number_parameter(parameter_tvb, tree, NULL);
|
||||
#.END
|
||||
|
||||
#----------------------------------------------------------------------------------------
|
||||
#.FN_PARS MSNetworkCapability
|
||||
VAL_PTR = ¶meter_tvb
|
||||
|
||||
#.FN_BODY MSNetworkCapability
|
||||
|
||||
tvbuff_t *parameter_tvb;
|
||||
proto_item *item;
|
||||
proto_tree *subtree;
|
||||
|
||||
%(DEFAULT_BODY)s
|
||||
|
||||
if (!parameter_tvb)
|
||||
return offset;
|
||||
item = get_ber_last_created_item();
|
||||
subtree = proto_item_add_subtree(item, ett_camel_MSNetworkCapability);
|
||||
de_gmm_ms_net_cap(parameter_tvb, subtree, 0, tvb_length_remaining(parameter_tvb,0), NULL, 0);
|
||||
#.END
|
||||
|
||||
#----------------------------------------------------------------------------------------
|
||||
#.FN_PARS MSRadioAccessCapability
|
||||
VAL_PTR = ¶meter_tvb
|
||||
|
||||
#.FN_BODY MSRadioAccessCapability
|
||||
|
||||
tvbuff_t *parameter_tvb;
|
||||
proto_item *item;
|
||||
proto_tree *subtree;
|
||||
|
||||
%(DEFAULT_BODY)s
|
||||
|
||||
if (!parameter_tvb)
|
||||
return offset;
|
||||
item = get_ber_last_created_item();
|
||||
subtree = proto_item_add_subtree(item, ett_camel_MSRadioAccessCapability);
|
||||
de_gmm_ms_radio_acc_cap(parameter_tvb, subtree, 0, tvb_length_remaining(parameter_tvb,0), NULL, 0);
|
||||
#.END
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------------------
|
||||
#.FN_PARS PDPTypeOrganization
|
||||
VAL_PTR = ¶meter_tvb
|
||||
|
||||
#.FN_BODY PDPTypeOrganization
|
||||
#.FN_BODY EndUserAddress/pDPTypeOrganization VAL_PTR = ¶meter_tvb
|
||||
|
||||
tvbuff_t *parameter_tvb;
|
||||
|
||||
|
@ -398,10 +409,7 @@ tvbuff_t *parameter_tvb;
|
|||
#.END
|
||||
|
||||
#----------------------------------------------------------------------------------------
|
||||
#.FN_PARS PDPTypeNumber
|
||||
VAL_PTR = ¶meter_tvb
|
||||
|
||||
#.FN_BODY PDPTypeNumber
|
||||
#.FN_BODY EndUserAddress/pDPTypeNumber VAL_PTR = ¶meter_tvb
|
||||
|
||||
tvbuff_t *parameter_tvb;
|
||||
proto_item *item;
|
||||
|
@ -426,11 +434,8 @@ tvbuff_t *parameter_tvb;
|
|||
}
|
||||
#.END
|
||||
|
||||
#----------------------------------------------------------------------------------------
|
||||
#.FN_PARS PDPAddress
|
||||
VAL_PTR = ¶meter_tvb
|
||||
|
||||
#.FN_BODY PDPAddress
|
||||
#.FN_BODY EndUserAddress/pDPAddress VAL_PTR = ¶meter_tvb
|
||||
|
||||
tvbuff_t *parameter_tvb;
|
||||
proto_item *item;
|
||||
|
@ -463,7 +468,7 @@ tvbuff_t *parameter_tvb;
|
|||
#.END
|
||||
|
||||
#----------------------------------------------------------------------------------------
|
||||
#.FN_BODY CellGlobalIdOrServiceAreaIdOrLAI
|
||||
#.FN_BODY LocationInformationGPRS/cellGlobalIdOrServiceAreaIdOrLAI
|
||||
proto_item *item;
|
||||
proto_tree *subtree;
|
||||
int start_offset;
|
||||
|
@ -482,10 +487,22 @@ tvbuff_t *parameter_tvb;
|
|||
#.END
|
||||
|
||||
#----------------------------------------------------------------------------------------
|
||||
#.FN_BODY AChBillingChargingCharacteristics VAL_PTR = ¶meter_tvb
|
||||
tvbuff_t *parameter_tvb;
|
||||
proto_item *item;
|
||||
proto_tree *subtree;
|
||||
|
||||
%(DEFAULT_BODY)s
|
||||
if (!parameter_tvb)
|
||||
return offset;
|
||||
item = get_ber_last_created_item();
|
||||
subtree = proto_item_add_subtree(item, ett_camel_CAMEL_AChBillingChargingCharacteristics);
|
||||
dissect_camel_CAMEL_AChBillingChargingCharacteristics(FALSE, parameter_tvb, 0, actx, subtree, -1);
|
||||
|
||||
|
||||
#.TYPE_ATTR
|
||||
CallingPartysCategory TYPE = FT_UINT16 DISPLAY = BASE_DEC STRINGS = VALS(isup_calling_partys_category_value)
|
||||
PDPTypeOrganization TYPE = FT_UINT8 DISPLAY = BASE_DEC BITMASK = 0x0f STRINGS = VALS(gsm_map_PDP_Type_Organisation_vals)
|
||||
DateAndTime TYPE = FT_STRING DISPLAY = NONE
|
||||
AccessPointName TYPE = FT_STRING DISPLAY = NONE
|
||||
Code/local TYPE = FT_INT32 DISPLAY = BASE_DEC STRINGS = VALS(camel_opr_code_strings)
|
||||
#.END
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
* Copyright 2005, Olivier Jacques <olivier.jacques@hp.com>
|
||||
* Copyright 2005, Javier AcuÇña <javier.acuna@sixbell.com>
|
||||
* Updated to ETSI TS 129 078 V6.4.0 (2004-3GPP TS 29.078 version 6.4.0 Release 6 1 12)
|
||||
* Copyright 2005-2006, Anders Broman <anders.broman@ericsson.com>
|
||||
* Copyright 2005-2007, Anders Broman <anders.broman@ericsson.com>
|
||||
* Updated to 3GPP TS 29.078 version 7.3.0 Release 7 (2006-06)
|
||||
* Built from the gsm-map dissector Copyright 2004, Anders Broman <anders.broman@ericsson.com>
|
||||
*
|
||||
|
@ -55,7 +55,7 @@
|
|||
#include "packet-e164.h"
|
||||
#include "packet-isup.h"
|
||||
#include "packet-gsm_map.h"
|
||||
#include "packet-gsm_a.h"
|
||||
#include "packet-inap.h"
|
||||
#include "packet-tcap.h"
|
||||
#include "epan/camel-persistentdata.h"
|
||||
#include "epan/tcap-persistentdata.h"
|
||||
|
@ -74,10 +74,8 @@ static guint32 errorCode=0;
|
|||
|
||||
|
||||
static int hf_digit = -1;
|
||||
static int hf_camel_addr_extension = -1;
|
||||
static int hf_camel_addr_natureOfAddressIndicator = -1;
|
||||
static int hf_camel_addr_numberingPlanInd = -1;
|
||||
static int hf_camel_addr_digits = -1;
|
||||
static int hf_camel_extension_code_local = -1;
|
||||
static int hf_camel_error_code_local = -1;
|
||||
static int hf_camel_cause_indicator = -1;
|
||||
static int hf_camel_PDPTypeNumber_etsi = -1;
|
||||
static int hf_camel_PDPTypeNumber_ietf = -1;
|
||||
|
@ -100,6 +98,9 @@ int hf_camelsrt_DeltaTime65=-1;
|
|||
int hf_camelsrt_DeltaTime22=-1;
|
||||
int hf_camelsrt_DeltaTime35=-1;
|
||||
int hf_camelsrt_DeltaTime80=-1;
|
||||
int hf_camel_CAMEL_AChBillingChargingCharacteristics = -1;
|
||||
|
||||
#include "packet-camel-hf.c"
|
||||
|
||||
static struct camelsrt_info_t * gp_camelsrt_info;
|
||||
|
||||
|
@ -107,9 +108,7 @@ static struct camelsrt_info_t * gp_camelsrt_info;
|
|||
static int dissect_invokeData(proto_tree *tree, tvbuff_t *tvb, int offset,asn1_ctx_t *actx);
|
||||
static int dissect_returnResultData(proto_tree *tree, tvbuff_t *tvb, int offset,asn1_ctx_t *actx);
|
||||
static int dissect_returnErrorData(proto_tree *tree, tvbuff_t *tvb, int offset,asn1_ctx_t *actx);
|
||||
|
||||
|
||||
#include "packet-camel-hf.c"
|
||||
static int dissect_camel_CAMEL_AChBillingChargingCharacteristics(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
|
||||
|
||||
gboolean gcamel_HandleSRT=FALSE;
|
||||
extern gboolean gcamel_PersistentSRT;
|
||||
|
@ -118,9 +117,6 @@ extern gboolean gcamel_DisplaySRT;
|
|||
/* Initialize the subtree pointers */
|
||||
static gint ett_camel = -1;
|
||||
static gint ett_camelisup_parameter = -1;
|
||||
static gint ett_camel_isdn_address_string = -1;
|
||||
static gint ett_camel_MSRadioAccessCapability = -1;
|
||||
static gint ett_camel_MSNetworkCapability = -1;
|
||||
static gint ett_camel_AccessPointName = -1;
|
||||
static gint ett_camel_pdptypenumber = -1;
|
||||
static gint ett_camel_stat = -1;
|
||||
|
@ -139,10 +135,22 @@ static dissector_handle_t camel_handle;
|
|||
static int application_context_version;
|
||||
static guint8 PDPTypeOrganization;
|
||||
static guint8 PDPTypeNumber;
|
||||
const char *camel_obj_id = NULL;
|
||||
gboolean is_ExtensionField =FALSE;
|
||||
|
||||
static char camel_number_to_char(int );
|
||||
static guint8 dissect_RP_cause_ie(tvbuff_t *tvb, guint32 offset, guint len,
|
||||
proto_tree *tree, int hf_cause_value, guint8 *cause_value);
|
||||
static int camel_opcode_type;
|
||||
#define CAMEL_OPCODE_INVOKE 1
|
||||
#define CAMEL_OPCODE_RETURN_RESULT 2
|
||||
#define CAMEL_OPCODE_RETURN_ERROR 3
|
||||
#define CAMEL_OPCODE_REJECT 4
|
||||
|
||||
static const value_string camel_Component_vals[] = {
|
||||
{ 1, "invoke" },
|
||||
{ 2, "returnResultLast" },
|
||||
{ 3, "returnError" },
|
||||
{ 4, "reject" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
||||
static const true_false_string camel_extension_value = {
|
||||
"No Extension",
|
||||
|
@ -231,89 +239,8 @@ static const value_string camel_RP_Cause_values[] = {
|
|||
{ 22,"Memory capacity exceeded" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
#include "packet-camel-val.h"
|
||||
|
||||
#include "packet-camel-fn.c"
|
||||
|
||||
const value_string camel_opr_code_strings[] = {
|
||||
|
||||
{0, "InitialDP"},
|
||||
{16, "AssistRequestInstructions"},
|
||||
{17, "EstablishTemporaryConnection"},
|
||||
{18, "DisconnectForwardConnection"},
|
||||
{19, "ConnectToResource"},
|
||||
{20, "Connect"},
|
||||
{22, "ReleaseCall"},
|
||||
{23, "RequestReportBCSMEvent"},
|
||||
{24, "EventReportBCSM"},
|
||||
{27, "CollectInformation"},
|
||||
{31, "Continue"},
|
||||
{32, "InitiateCallAttempt"},
|
||||
{33, "ResetTimer"},
|
||||
{34, "FurnishChargingInformation"},
|
||||
{35, "ApplyCharging"},
|
||||
{36, "ApplyChargingReport"},
|
||||
{41, "CallGap"},
|
||||
{44, "CallInformationReport"},
|
||||
{45, "CallInformationRequest"},
|
||||
{46, "SendChargingInformation"},
|
||||
{47, "PlayAnnouncement"},
|
||||
{48, "PromptAndCollectUserInformation"},
|
||||
{49, "SpecializedResourceReport"},
|
||||
{53, "Cancel"},
|
||||
{55, "ActivityTest"},
|
||||
{56, "ContinueWithArgument"},
|
||||
{60, "InitialDPSMS"},
|
||||
{61, "FurnishChargingInformationSMS"},
|
||||
{62, "ConnectSMS"},
|
||||
{63, "RequestReportSMSEvent"},
|
||||
{64, "EventReportSMS"},
|
||||
{65, "ContinueSMS"},
|
||||
{66, "ReleaseSMS"},
|
||||
{67, "ResetTimerSMS"},
|
||||
{70, "ActivityTestGPRS"},
|
||||
{71, "ApplyChargingGPRS"},
|
||||
{72, "ApplyChargingReportGPRS"},
|
||||
{73, "CancelGPRS"},
|
||||
{74, "ConnectGPRS"},
|
||||
{75, "ContinueGPRS"},
|
||||
{76, "EntityReleasedGPRS"},
|
||||
{77, "FurnishChargingInformationGPRS"},
|
||||
{78, "InitialDPGPRS"},
|
||||
{79, "ReleaseGPRS"},
|
||||
{80, "EventReportGPRS"},
|
||||
{81, "RequestReportGPRSEvent"},
|
||||
{82, "ResetTimerGPRS"},
|
||||
{83, "SendChargingInformationGPRS"},
|
||||
{86, "DFCWithArgument"},
|
||||
{88, "ContinueWithArgument"},
|
||||
{90, "DisconnectLeg"},
|
||||
{93, "MoveLeg"},
|
||||
{95, "SplitLeg"},
|
||||
{96, "EntityReleased"},
|
||||
{97, "PlayTone"},
|
||||
{0, NULL}
|
||||
};
|
||||
|
||||
static const value_string camel_err_code_string_vals[] = {
|
||||
{ 0, "Canceled"},
|
||||
{ 1, "CancelFailed"},
|
||||
{ 3, "ETCFailed"},
|
||||
{ 4, "ImproperCallerResponse"},
|
||||
{ 6, "MissingCustomerRecord"},
|
||||
{ 7, "MissingParameter"},
|
||||
{ 8, "ParameterOutOfRange"},
|
||||
{ 10, "RequestedInfoError"},
|
||||
{ 11, "SystemFailure"},
|
||||
{ 12, "TaskRefused"},
|
||||
{ 13, "UnavailableResource"},
|
||||
{ 14, "UnexpectedComponentSequence"},
|
||||
{ 15, "UnexpectedDataValue"},
|
||||
{ 16, "UnexpectedParameter"},
|
||||
{ 17, "UnknownLegID"},
|
||||
{ 50, "UnknownPDPID"},
|
||||
{ 51, "UnknownCSID"},
|
||||
{ 0, NULL}
|
||||
};
|
||||
|
||||
static char camel_number_to_char(int number)
|
||||
{
|
||||
|
@ -358,274 +285,15 @@ dissect_RP_cause_ie(tvbuff_t *tvb, guint32 offset, _U_ guint len,
|
|||
return(curr_offset - offset);
|
||||
}
|
||||
|
||||
#include "packet-camel-fn.c"
|
||||
|
||||
static int dissect_invokeData(proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ctx_t *actx) {
|
||||
proto_item *cause;
|
||||
gint8 bug_class;
|
||||
gboolean bug_pc, bug_ind_field;
|
||||
gint32 bug_tag;
|
||||
guint32 bug_len1;
|
||||
|
||||
switch(opcode){
|
||||
case 0: /*InitialDP*/
|
||||
offset=dissect_camel_InitialDPArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 16: /*AssistRequestInstructions*/
|
||||
offset=dissect_camel_AssistRequestInstructionsArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 17: /*EstablishTemporaryConnection*/
|
||||
offset=dissect_camel_EstablishTemporaryConnectionArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 18: /*DisconnectForwardConnections*/
|
||||
proto_tree_add_text(tree, tvb, offset, -1, "Disconnect Forward Connection");
|
||||
break;
|
||||
case 19: /*ConnectToResource*/
|
||||
offset=dissect_camel_ConnectToResourceArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 20: /*Connect*/
|
||||
offset=dissect_camel_ConnectArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 22: /*releaseCall*/
|
||||
offset=dissect_camel_ReleaseCallArg(FALSE, tvb, offset, actx, tree, hf_camel_cause);
|
||||
break;
|
||||
case 23: /*RequestReportBCSMEvent*/
|
||||
offset=dissect_camel_RequestReportBCSMEventArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 24: /*EventReportBCSM*/
|
||||
offset=dissect_camel_EventReportBCSMArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 27: /*CollectInformation*/
|
||||
offset=dissect_camel_CollectInformationArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 31: /*Continue*/
|
||||
/* Continue: no arguments - do nothing */
|
||||
break;
|
||||
case 32: /*initiateCallAttempt*/
|
||||
offset=dissect_camel_InitiateCallAttemptArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 33: /*ResetTimer*/
|
||||
offset=dissect_camel_ResetTimerArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 34: /*FurnishChargingInformation*/
|
||||
/* offset=dissect_camel_FurnishChargingInformationArg(TRUE, tvb, offset, tree, -1); */
|
||||
offset = get_ber_identifier(tvb, offset, &bug_class, &bug_pc, &bug_tag);
|
||||
offset = get_ber_length(tree, tvb, offset, &bug_len1, &bug_ind_field);
|
||||
offset=dissect_camel_CAMEL_FCIBillingChargingCharacteristics(TRUE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 35: /*ApplyCharging*/
|
||||
offset=dissect_camel_ApplyChargingArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 36: /*ApplyChargingReport*/
|
||||
/* offset=dissect_camel_ApplyChargingReportArg(TRUE, tvb, offset, tree, -1); */
|
||||
offset = get_ber_identifier(tvb, offset, &bug_class, &bug_pc, &bug_tag);
|
||||
offset = get_ber_length(tree, tvb, offset, &bug_len1, &bug_ind_field);
|
||||
offset=dissect_camel_CAMEL_CallResult(TRUE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 41: /*CallGap*/
|
||||
offset=dissect_camel_CallGapArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 44: /*CallInformationReport*/
|
||||
offset=dissect_camel_CallInformationReportArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 45: /*CallInformationRequest*/
|
||||
offset=dissect_camel_CallInformationRequestArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 46: /*SendChargingInformation*/
|
||||
offset=dissect_camel_SendChargingInformationArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 47: /*PlayAnnouncement*/
|
||||
offset=dissect_camel_PlayAnnouncementArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 48: /*PromptAndCollectUserInformation*/
|
||||
offset=dissect_camel_PromptAndCollectUserInformationArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 49: /*SpecializedResourceReport*/
|
||||
offset=dissect_camel_SpecializedResourceReportArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 53: /*Cancel*/
|
||||
offset=dissect_camel_CancelArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 56: /*ContinueWithArgument*/
|
||||
offset=dissect_camel_ContinueWithArgumentArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 60: /*InitialDPSMS*/
|
||||
offset=dissect_camel_InitialDPSMSArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 61: /*FurnishChargingInformationSMS*/
|
||||
/* offset=dissect_camel_FurnishChargingInformationSMSArg(FALSE, tvb, offset, tree, -1); */
|
||||
offset = get_ber_identifier(tvb, offset, &bug_class, &bug_pc, &bug_tag);
|
||||
offset = get_ber_length(tree, tvb, offset, &bug_len1, &bug_ind_field);
|
||||
offset=dissect_camel_CAMEL_FCISMSBillingChargingCharacteristics(TRUE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 62: /*ConnectSMS*/
|
||||
offset=dissect_camel_ConnectSMSArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 63: /*RequestReportSMSEvent*/
|
||||
offset=dissect_camel_RequestReportSMSEventArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 64: /*EventReportSMS*/
|
||||
offset=dissect_camel_EventReportSMSArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 65: /*ContinueSMS*/
|
||||
/* ContinueSMS: no arguments - do nothing */
|
||||
break;
|
||||
case 66: /*ReleaseSMS*/
|
||||
offset=dissect_camel_ReleaseSMSArg(FALSE, tvb, offset, actx, tree, hf_camel_RP_Cause);
|
||||
break;
|
||||
case 67: /*ResetTimerSMS*/
|
||||
offset=dissect_camel_ResetTimerSMSArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 71: /*ApplyChargingGPRS*/
|
||||
offset=dissect_camel_ApplyChargingGPRSArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 72: /*ApplyChargingReportGPRS*/
|
||||
offset=dissect_camel_ApplyChargingReportGPRSArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 73: /*CancelGPRS*/
|
||||
offset=dissect_camel_CancelGPRSArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 74: /*ConnectGPRS*/
|
||||
offset=dissect_camel_ConnectGPRSArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 75: /*ContinueGPRS*/
|
||||
offset=dissect_camel_ContinueGPRSArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 76: /*EntityReleasedGPRS*/
|
||||
offset=dissect_camel_EntityReleasedGPRSArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 77: /*FurnishChargingInformationGPRS*/
|
||||
/* offset=dissect_camel_FurnishChargingInformationGPRSArg(FALSE, tvb, offset, tree, -1); */
|
||||
offset = get_ber_identifier(tvb, offset, &bug_class, &bug_pc, &bug_tag);
|
||||
offset = get_ber_length(tree, tvb, offset, &bug_len1, &bug_ind_field);
|
||||
offset=dissect_camel_CAMEL_FCIGPRSBillingChargingCharacteristics(TRUE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 78: /*InitialDPGPRS*/
|
||||
offset=dissect_camel_InitialDPGPRSArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 79: /*ReleaseGPRS*/
|
||||
offset=dissect_camel_ReleaseGPRSArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 80: /*EventReportGPRS*/
|
||||
offset=dissect_camel_EventReportGPRSArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 81: /*RequestReportGPRSEvent*/
|
||||
offset=dissect_camel_RequestReportGPRSEventArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 82: /*ResetTimerGPRS*/
|
||||
offset=dissect_camel_ResetTimerGPRSArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 83: /*SendChargingInformationGPRS*/
|
||||
offset=dissect_camel_SendChargingInformationGPRSArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 86: /*DFCWithArgument*/
|
||||
offset= dissect_camel_DisconnectForwardConnectionWithArgumentArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 88: /*ContinueWithArgument*/
|
||||
/* XXX Same as opcode 56 ??? */
|
||||
offset= dissect_camel_ContinueWithArgumentArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 90: /*DisconnectLeg*/
|
||||
offset= dissect_camel_DisconnectLegArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 93: /*MoveLeg*/
|
||||
offset= dissect_camel_MoveLegArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 95: /*SplitLeg*/
|
||||
offset= dissect_camel_SplitLegArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 96: /*EntityReleased*/
|
||||
offset= dissect_camel_EntityReleasedArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 97: /*PlayTone*/
|
||||
offset= dissect_camel_PlayToneArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
default:
|
||||
cause=proto_tree_add_text(tree, tvb, offset, -1, "Unknown invokeData blob");
|
||||
proto_item_set_expert_flags(cause, PI_MALFORMED, PI_WARN);
|
||||
expert_add_info_format(actx->pinfo, cause, PI_MALFORMED, PI_WARN, "Unknown invokeData %d",opcode);
|
||||
/* todo call the asn.1 dissector */
|
||||
}
|
||||
return offset;
|
||||
}
|
||||
#include "packet-camel-table.c"
|
||||
|
||||
|
||||
static int dissect_returnResultData(proto_tree *tree, tvbuff_t *tvb, int offset,asn1_ctx_t *actx) {
|
||||
proto_item *cause;
|
||||
|
||||
switch(opcode){
|
||||
case 32: /*initiateCallAttempt*/
|
||||
offset=dissect_camel_InitiateCallAttemptRes(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 48: /*PromptAndCollectUserInformation*/
|
||||
offset=dissect_camel_ReceivedInformationArg(FALSE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 55: /*ActivityTest*/
|
||||
/* ActivityTest: no arguments - do nothing */
|
||||
break;
|
||||
case 70: /*ActivityTestGPRS*/
|
||||
/* ActivityTestGPRS: no arguments - do nothing */
|
||||
break;
|
||||
default:
|
||||
cause=proto_tree_add_text(tree, tvb, offset, -1, "Unknown returnResultData blob");
|
||||
proto_item_set_expert_flags(cause, PI_MALFORMED, PI_WARN);
|
||||
expert_add_info_format(actx->pinfo, cause, PI_MALFORMED, PI_WARN, "Unknown returnResultData %d",opcode);
|
||||
}
|
||||
return offset;
|
||||
}
|
||||
|
||||
static int dissect_returnErrorData(proto_tree *tree, tvbuff_t *tvb, int offset,asn1_ctx_t *actx) {
|
||||
proto_item *cause;
|
||||
|
||||
switch(errorCode) {
|
||||
case 1: /*CancelFailed*/
|
||||
offset=dissect_camel_CancelFailedPARAM(TRUE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 10: /*RequestedInfoError*/
|
||||
offset=dissect_camel_RequestedInfoErrorPARAM(TRUE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 11: /*SystemFailure*/
|
||||
offset=dissect_camel_SystemFailurePARAM(TRUE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
case 12: /*TaskRefused*/
|
||||
offset=dissect_camel_TaskRefusedPARAM(TRUE, tvb, offset, actx, tree, -1);
|
||||
break;
|
||||
default:
|
||||
cause=proto_tree_add_text(tree, tvb, offset, -1, "Unknown returnErrorData blob");
|
||||
proto_item_set_expert_flags(cause, PI_MALFORMED, PI_WARN);
|
||||
expert_add_info_format(actx->pinfo, cause, PI_MALFORMED, PI_WARN, "Unknown returnErrorData %d",errorCode);
|
||||
}
|
||||
return offset;
|
||||
}
|
||||
|
||||
static guint8 camel_pdu_type = 0;
|
||||
static guint8 camel_pdu_size = 0;
|
||||
|
||||
static void dissect_camelext_CAPGPRSReferenceNumber(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree) {
|
||||
proto_item *item=NULL;
|
||||
proto_tree *tree=NULL;
|
||||
proto_item *camel_item=NULL;
|
||||
proto_tree *camel_tree=NULL;
|
||||
asn1_ctx_t asn1_ctx;
|
||||
|
||||
asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
|
||||
|
||||
|
||||
if (check_col(pinfo->cinfo, COL_PROTOCOL)) {
|
||||
col_set_str(pinfo->cinfo, COL_PROTOCOL, "Camel");
|
||||
}
|
||||
|
||||
/* create display subtree for the protocol */
|
||||
if(parent_tree){
|
||||
camel_item = proto_tree_add_item(parent_tree, proto_camel, tvb, 0, -1, FALSE);
|
||||
camel_tree = proto_item_add_subtree(camel_item, ett_camel);
|
||||
}
|
||||
/* create display subtree for the protocol */
|
||||
if(camel_tree){
|
||||
item = proto_tree_add_text(camel_tree, tvb, 0, -1, "GPRS Reference Number");
|
||||
tree = proto_item_add_subtree(item, ett_camel_CAPGPRSReferenceNumber);
|
||||
}
|
||||
dissect_camel_CAPGPRSReferenceNumber(FALSE, tvb, 0, &asn1_ctx, tree, -1);
|
||||
}
|
||||
|
||||
static int
|
||||
dissect_camel_camelPDU(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, asn1_ctx_t *actx _U_,proto_tree *tree, int hf_index) {
|
||||
|
@ -660,7 +328,8 @@ dissect_camel_camelPDU(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, asn
|
|||
col_append_fstr(actx->pinfo->cinfo, COL_INFO, " ");
|
||||
}
|
||||
|
||||
offset = dissect_camel_Component(FALSE, tvb, 0, actx, tree, hf_index);
|
||||
is_ExtensionField =FALSE;
|
||||
offset = dissect_camel_ROS(TRUE, tvb, offset, actx, tree, hf_index);
|
||||
|
||||
return offset;
|
||||
}
|
||||
|
@ -729,8 +398,7 @@ void proto_reg_handoff_camel(void) {
|
|||
register_ber_oid_dissector_handle("0.4.0.0.1.0.52.1",camel_handle, proto_camel, "itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) gsm-Network|umts-Network(1) applicationContext(0) cap-gsmSRF-to-gsmscf(52) version2(1)" );
|
||||
register_ber_oid_dissector_handle("0.4.0.0.1.21.3.50",camel_handle, proto_camel, "itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) gsm-Network(1) cAP3OE(21) ac(3) id-ac-CAP-gprsSSF-gsmSCF-AC(50)" );
|
||||
register_ber_oid_dissector_handle("0.4.0.0.1.21.3.61",camel_handle, proto_camel, "itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) gsm-Network(1) cAP3OE(21) ac(3) id-ac-cap3-sms-AC(61)" );
|
||||
|
||||
register_ber_oid_dissector("0.4.0.0.1.1.5.2", dissect_camelext_CAPGPRSReferenceNumber, proto_camel, "itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) gsm-Network(1) abstractSyntax(1) cap-GPRS-ReferenceNumber(5) version3(2)");
|
||||
#include "packet-camel-dis-tab.c"
|
||||
} else {
|
||||
range_foreach(ssn_range, range_delete_callback);
|
||||
}
|
||||
|
@ -746,26 +414,18 @@ void proto_register_camel(void) {
|
|||
module_t *camel_module;
|
||||
/* List of fields */
|
||||
static hf_register_info hf[] = {
|
||||
{ &hf_camel_extension_code_local,
|
||||
{ "local", "camel.extension_code_local",
|
||||
FT_INT32, BASE_DEC, NULL, 0,
|
||||
"Extension local code", HFILL }},
|
||||
{ &hf_camel_error_code_local,
|
||||
{ "local", "camel.error_code_local",
|
||||
FT_INT32, BASE_DEC, VALS(camel_err_code_string_vals), 0,
|
||||
"ERROR code", HFILL }},
|
||||
{ &hf_camel_cause_indicator, /* Currently not enabled */
|
||||
{ "Cause indicator", "camel.cause_indicator",
|
||||
FT_UINT8, BASE_DEC, VALS(q850_cause_code_vals), 0x7f,
|
||||
"", HFILL }},
|
||||
{ &hf_camel_addr_extension,
|
||||
{ "Extension", "camel.addr_extension",
|
||||
FT_BOOLEAN, 8, TFS(&camel_extension_value), 0x80,
|
||||
"Extension", HFILL }},
|
||||
{ &hf_camel_addr_natureOfAddressIndicator,
|
||||
{ "Nature of address", "camel.addr_nature_of_addr",
|
||||
FT_UINT8, BASE_HEX, VALS(camel_nature_of_addr_indicator_values), 0x70,
|
||||
"Nature of address", HFILL }},
|
||||
{ &hf_camel_addr_numberingPlanInd,
|
||||
{ "Numbering plan indicator", "camel.addr_numbering_plan",
|
||||
FT_UINT8, BASE_HEX, VALS(camel_number_plan_values), 0x0f,
|
||||
"Numbering plan indicator", HFILL }},
|
||||
{ &hf_camel_addr_digits,
|
||||
{ "Address digits", "camel.address_digits",
|
||||
FT_STRING, BASE_NONE, NULL, 0,
|
||||
"Address digits", HFILL }},
|
||||
{ &hf_digit,
|
||||
{ "Digit Value", "camel.digit_value",
|
||||
FT_UINT8, BASE_DEC, VALS(digit_value), 0, "Digit Value", HFILL }},
|
||||
|
@ -873,6 +533,10 @@ void proto_register_camel(void) {
|
|||
FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0,
|
||||
"DeltaTime between EventReportGPRS and ContinueGPRS", HFILL }
|
||||
},
|
||||
{ &hf_camel_CAMEL_AChBillingChargingCharacteristics,
|
||||
{ "CAMEL-AChBillingChargingCharacteristics", "camel.CAMEL_AChBillingChargingCharacteristics",
|
||||
FT_BYTES, BASE_HEX, NULL, 0,
|
||||
"CAMEL-AChBillingChargingCharacteristics", HFILL }},
|
||||
|
||||
#ifdef REMOVED
|
||||
#endif
|
||||
|
@ -883,9 +547,6 @@ void proto_register_camel(void) {
|
|||
static gint *ett[] = {
|
||||
&ett_camel,
|
||||
&ett_camelisup_parameter,
|
||||
&ett_camel_isdn_address_string,
|
||||
&ett_camel_MSRadioAccessCapability,
|
||||
&ett_camel_MSNetworkCapability,
|
||||
&ett_camel_AccessPointName,
|
||||
&ett_camel_pdptypenumber,
|
||||
&ett_camel_stat,
|
||||
|
|
|
@ -42,6 +42,7 @@ void proto_register_camel(void);
|
|||
|
||||
|
||||
WS_VAR_IMPORT const value_string camel_opr_code_strings[];
|
||||
const value_string camel_err_code_string_vals[];
|
||||
/* #include "packet-camel-exp.h"*/
|
||||
|
||||
#endif /* PACKET_camel_H */
|
||||
|
|
|
@ -15,15 +15,12 @@ Bind
|
|||
Unbind
|
||||
#.END
|
||||
|
||||
#.MAKE_ENUM
|
||||
Code/local
|
||||
|
||||
#.TYPE_RENAME
|
||||
|
||||
Invoke/argument InvokeArgument
|
||||
ReturnResult/result/result ResultArgument
|
||||
Attribute/value Attributevalue
|
||||
EventReportArgument/eventInfo EventReportArgumenteventInfo
|
||||
Attribute/value AttributeValue
|
||||
EventReportArgument/eventInfo EventReportArgumentEventInfo
|
||||
|
||||
#.FIELD_RENAME
|
||||
|
||||
|
@ -35,6 +32,7 @@ Reject/problem/returnResult returnResultProblem
|
|||
|
||||
ReturnResult/result/result resultArgument
|
||||
|
||||
SetArgument/modificationList/_item/attributeValue attributevalue
|
||||
ActionTypeId/globalForm actionTypeId_globalForm
|
||||
AttributeId/globalForm attributeId_globalForm
|
||||
EventTypeId/globalForm eventTypeId_globalForm
|
||||
|
@ -219,10 +217,6 @@ RejectProblem
|
|||
|
||||
#.PDU
|
||||
|
||||
#.TYPE_RENAME
|
||||
|
||||
#.FIELD_RENAME
|
||||
SetArgument/modificationList/_item/attributeValue attributevalue
|
||||
|
||||
#.FN_HDR CMIPAbortInfo
|
||||
if(check_col(actx->pinfo->cinfo, COL_INFO)){
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,7 +1,7 @@
|
|||
/* Do not modify this file. */
|
||||
/* It is created automatically by the ASN.1 to Wireshark dissector compiler */
|
||||
/* .\packet-camel.h */
|
||||
/* ../../tools/asn2wrs.py -b -X -e -p camel -c camel.cnf -s packet-camel-template camel.asn */
|
||||
/* ../../tools/asn2wrs.py -b -X -T -L -e -k -p camel -c camel.cnf -s packet-camel-template TCAPMessages.asn CAP-object-identifiers.asn CAP-classes.asn CAP-datatypes.asn CAP-errorcodes.asn CAP-errortypes.asn CAP-operationcodes.asn CAP-GPRS-ReferenceNumber.asn CAP-gsmSCF-gsmSRF-ops-args.asn CAP-gsmSSF-gsmSCF-ops-args.asn CAP-gprsSSF-gsmSCF-ops-args.asn CAP-SMS-ops-args.asn CAP-U-ABORT-Data.asn ../ros/Remote-Operations-Information-Objects.asn ../ros/Remote-Operations-Generic-ROS-PDUs.asn */
|
||||
|
||||
/* Input file: packet-camel-template.h */
|
||||
|
||||
|
@ -50,6 +50,7 @@ void proto_register_camel(void);
|
|||
|
||||
|
||||
WS_VAR_IMPORT const value_string camel_opr_code_strings[];
|
||||
const value_string camel_err_code_string_vals[];
|
||||
/* #include "packet-camel-exp.h"*/
|
||||
|
||||
#endif /* PACKET_camel_H */
|
||||
|
|
Loading…
Reference in New Issue