diff options
Diffstat (limited to 'epan/dissectors/asn1/inap/inap.cnf')
-rw-r--r-- | epan/dissectors/asn1/inap/inap.cnf | 323 |
1 files changed, 323 insertions, 0 deletions
diff --git a/epan/dissectors/asn1/inap/inap.cnf b/epan/dissectors/asn1/inap/inap.cnf new file mode 100644 index 0000000000..49aaba5f5b --- /dev/null +++ b/epan/dissectors/asn1/inap/inap.cnf @@ -0,0 +1,323 @@ +# inap.cnf +# inap conformation file + +#.IMPORT ../dap/dap-exp.cnf +#.IMPORT ../dsp/dsp-exp.cnf + +#.EXPORTS +BothwayThroughConnectionInd +CallingPartysCategory +CriticalityType +Duration +HighLayerCompatibility +Integer4 +Interval +LegID +MiscCallInfo +RedirectionInformation +ServiceKey + +#.NO_EMIT ONLY_VALS +ROS + +#.OMIT_ASSIGNMENT +# Removed as they are giving 'defined but not used' warnings currently. +Priority +RejectProblem +#.END + +#.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 + +#.OMIT_ASSIGNMENT Remote-Operations-Information-Objects +Bind +Unbind +#.END + +#.PDU +ERROR.&ParameterType +OPERATION.&ArgumentType +OPERATION.&ResultType + +# This table creates the value_sting to name Inap operation codes and errors +# in file packet-inap-table.c which is included in the template file +# +#.TABLE_HDR +/* INAP OPERATIONS */ +const value_string inap_opr_code_strings[] = { +#.TABLE_BODY OPERATION.&operationCode + { %(&operationCode)-40s, "%(_ident)s" }, +#.TABLE_FTR + { 0, NULL } +}; +#.END + +#.TABLE_HDR +/* INAP ERRORS */ +static const value_string inap_err_code_string_vals[] = { +#.TABLE_BODY ERROR.&errorCode + { %(&errorCode)-40s, "%(_ident)s" }, +#.TABLE_FTR + { 0, NULL } +}; +#.END + +# This table creates the switch() to branch on Camel operation codes and errors +# in file packet-inap-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_inap_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_inap_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_inap_unknown_returnErrorData, + tvb, offset, -1, "Unknown returnErrorData %d", opcode); + } + return offset; +} +#.END + +# Create a table of opcode and corresponding args and res +#.TABLE11_HDR +typedef struct _inap_op_t { + gint32 opcode; + dissector_t arg_pdu; + dissector_t res_pdu; +} inap_op_t; + +static const inap_op_t inap_op_tab[] = { +#.TABLE11_BODY OPERATION.&operationCode + /* %(_name)-31s */ { %(&operationCode)-40s, %(_argument_pdu)-45s, %(_result_pdu)s }, +#.TABLE11_FTR +}; +#.END + +#.TABLE11_HDR +typedef struct _inap_err_t { + gint32 errcode; + dissector_t err_pdu; +} inap_err_t; + +static const inap_err_t inap_err_tab[] = { +#.TABLE11_BODY ERROR.&errorCode + /* %(_name)-30s */ { %(&errorCode)4s, %(_parameter_pdu)s }, +#.TABLE11_FTR +}; +#.END + +# ROS stuff here XXX change when TCAP is redone. + +#.FN_BODY Code/local VAL_PTR = &opcode + %(DEFAULT_BODY)s + if (inap_opcode_type == INAP_OPCODE_RETURN_ERROR){ + errorCode = opcode; + col_append_str(actx->pinfo->cinfo, COL_INFO, + val_to_str(errorCode, inap_err_code_string_vals, "Unknown INAP 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, inap_opr_code_strings, "Unknown INAP (%%u)")); + col_append_str(actx->pinfo->cinfo, COL_INFO, " "); + col_set_fence(actx->pinfo->cinfo, COL_INFO); + } + +#.FN_HDR Invoke + inap_opcode_type=INAP_OPCODE_INVOKE; + +#.FN_HDR ReturnResult + inap_opcode_type=INAP_OPCODE_RETURN_RESULT; + +#.FN_HDR ReturnError + inap_opcode_type=INAP_OPCODE_RETURN_ERROR; + +#.FN_HDR Reject + inap_opcode_type=INAP_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 TriggerData/triggerPar +/* FIX ME */ + +#.FN_BODY ScriptEventArg/uIScriptResult +/* FIX ME */ + +#.FN_BODY ScriptCloseArg/uIScriptSpecificInfo +/* FIX ME */ + +#.FN_BODY ScriptInformationArg/uIScriptSpecificInfo +/* FIX ME */ +#.FN_BODY ScriptRunArg/uIScriptSpecificInfo +/* FIX ME */ + +#.FN_HDR ExtensionField + obj_id = NULL; + +#.FN_PARS Code/global FN_VARIANT = _str VAL_PTR = &obj_id + +#.FN_BODY ExtensionField/value + proto_tree *ext_tree; + ext_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_inap_extension_data, NULL, "Extension Data"); + if (obj_id){ + offset=call_ber_oid_callback(obj_id, tvb, offset, actx->pinfo, ext_tree, NULL); + }else{ + call_dissector(data_handle, tvb, actx->pinfo, ext_tree); + offset = tvb_reported_length_remaining(tvb,offset); + } + + + +#.FN_BODY CalledPartyNumber VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + +dissect_isup_called_party_number_parameter(parameter_tvb, tree, NULL); + +#.FN_BODY CallingPartyNumber VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + + dissect_isup_calling_party_number_parameter(parameter_tvb, tree, NULL); + + +#.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); + +#.FN_BODY RedirectionInformation VAL_PTR = ¶meter_tvb + + tvbuff_t *parameter_tvb; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + + dissect_isup_redirection_information_parameter(parameter_tvb, tree, NULL); + +#.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); + +#.FN_BODY RedirectingPartyID VAL_PTR = ¶meter_tvb + + tvbuff_t *parameter_tvb; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + dissect_isup_redirecting_number_parameter(parameter_tvb, tree, NULL); + +#.FN_BODY HighLayerCompatibility VAL_PTR = ¶meter_tvb +/* + * -- Indicates the teleservice. For encoding, DSS1 (Q.931) is used. + */ + tvbuff_t *parameter_tvb; + proto_tree *subtree; +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + + subtree = proto_item_add_subtree(actx->created_item, ett_inap_HighLayerCompatibility); + dissect_q931_high_layer_compat_ie(parameter_tvb, 0, tvb_reported_length_remaining(parameter_tvb,0), subtree); + + #.FN_BODY Cause VAL_PTR = ¶meter_tvb + /* + * -- Indicates the cause for interface related information. Refer to the Q.763 Cause parameter for encoding + * -- For the use of cause and location values refer to Q.850. + */ +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_inap_cause); + + dissect_q931_cause_ie(parameter_tvb, 0, tvb_reported_length_remaining(parameter_tvb,0), subtree, hf_inap_cause_indicator, &Cause_value, isup_parameter_type_value); + +#.TYPE_ATTR +CallingPartysCategory TYPE = FT_UINT16 DISPLAY = BASE_DEC|BASE_EXT_STRING STRINGS = &isup_calling_partys_category_value_ext + +#.END + + |