wireshark/asn1/inap/inap.cnf

307 lines
7.5 KiB
INI

# 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_NEW
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;
new_dissector_t arg_pdu;
new_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;
new_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_extention_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_length_remaining(tvb,offset);
}
#.FN_BODY CalledPartyNumber VAL_PTR = &parameter_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 = &parameter_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 = &parameter_tvb
tvbuff_t *parameter_tvb;
%(DEFAULT_BODY)s
if (!parameter_tvb)
return offset;
dissect_q931_bearer_capability_ie(parameter_tvb, 0, tvb_length_remaining(parameter_tvb,0), tree);
#.FN_BODY RedirectionInformation VAL_PTR = &parameter_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 = &parameter_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 = &parameter_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 = &parameter_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_length_remaining(parameter_tvb,0), subtree);
#.TYPE_ATTR
CallingPartysCategory TYPE = FT_UINT16 DISPLAY = BASE_DEC|BASE_EXT_STRING STRINGS = &isup_calling_partys_category_value_ext
#.END