314 lines
7.7 KiB
INI
314 lines
7.7 KiB
INI
# inap.cnf
|
|
# inap conformation file
|
|
# $Id$
|
|
|
|
#.IMPORT ../dap/dap-exp.cnf
|
|
#.IMPORT ../dsp/dsp-exp.cnf
|
|
|
|
#.EXPORTS
|
|
BothwayThroughConnectionInd
|
|
CallingPartysCategory
|
|
CriticalityType
|
|
Duration
|
|
HighLayerCompatibility
|
|
Integer4
|
|
Interval
|
|
LegID
|
|
MiscCallInfo
|
|
RedirectionInformation
|
|
ServiceKey
|
|
|
|
#.NO_EMIT
|
|
|
|
#.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
|
|
|
|
#.PDU
|
|
|
|
# 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) {
|
|
proto_item *cause;
|
|
|
|
switch(opcode){
|
|
#.TABLE2_BODY OPERATION.&ArgumentType
|
|
case %(&operationCode)s: /* %(_ident)s */
|
|
offset= %(_argument_pdu)s(tvb, actx->pinfo , tree);
|
|
break;
|
|
#.TABLE2_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
|
|
#.TABLE2_HDR
|
|
static int dissect_returnResultData(proto_tree *tree, tvbuff_t *tvb, int offset,asn1_ctx_t *actx) {
|
|
proto_item *cause;
|
|
|
|
switch(opcode){
|
|
#.TABLE2_BODY OPERATION.&ResultType
|
|
case %(&operationCode)s: /* %(_ident)s */
|
|
offset= %(_result_pdu)s(tvb, actx->pinfo , tree);
|
|
break;
|
|
#.TABLE2_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
|
|
#.TABLE2_HDR
|
|
static int dissect_returnErrorData(proto_tree *tree, tvbuff_t *tvb, int offset,asn1_ctx_t *actx) {
|
|
proto_item *cause;
|
|
|
|
switch(errorCode) {
|
|
#.TABLE2_BODY ERROR.&ParameterType
|
|
case %(&errorCode)s: /* %(_ident)s */
|
|
%(_parameter_pdu)s(tvb, actx->pinfo , tree);
|
|
break;
|
|
#.TABLE2_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
|
|
|
|
# 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_add_text(tree, tvb, offset, -1, "Extension Data");
|
|
if (obj_id){
|
|
offset=call_ber_oid_callback(obj_id, tvb, offset, actx->pinfo, tree);
|
|
}else{
|
|
call_dissector(data_handle, tvb, actx->pinfo, tree);
|
|
offset = tvb_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_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, 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_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
|
|
|
|
|