1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
# tcap.cnf
# $Id$
# tcap conformation file
#.OMIT_ASSIGNMENT
# Removed as they are giving 'defined but not used' warnings currently.
Priority
#.END
#--- OperationCode ---
#.FN_PARS
OperationCode VAL_PTR = &ansi_tcap_private.d.OperationCode
OperationCode/national VAL_PTR = &ansi_tcap_private.d.OperationCode_national
OperationCode/private VAL_PTR = &ansi_tcap_private.d.OperationCode_private
#.FN_FTR OperationCode
ansi_tcap_private.d.OperationCode_item = actx->created_item;
#.END
#--- INVOKE ---
#.FN_BODY Invoke/parameter
if(find_tcap_subdissector(tvb, actx, tree))
offset = tvb_length(tvb);
#.FN_HDR Invoke
ansi_tcap_private.d.pdu = 1;
#--- RETURN RESULT ---
#.FIELD_ATTR
#.FN_BODY ReturnResult/parameter
if(find_tcap_subdissector(tvb, actx, tree))
offset = tvb_length(tvb);
#.FN_HDR ReturnResult
ansi_tcap_private.d.pdu = 2;
#--- RETURN ERROR ---
#.FN_BODY ReturnError/parameter
if(find_tcap_subdissector(tvb, actx, tree))
offset = tvb_length(tvb);
#.FN_HDR ReturnError
ansi_tcap_private.d.pdu = 3;
#--- ObjectIDApplicationContext --
#.FN_BODY ObjectIDApplicationContext FN_VARIANT = _str VAL_PTR = &oid_str
static const char * oid_str;
%(DEFAULT_BODY)s
ansi_tcap_private.objectApplicationId_oid= (void*) oid_str;
ansi_tcap_private.oid_is_present=TRUE;
#.FN_HDR PackageType/unidirectional
gp_tcapsrt_info->ope=TC_ANSI_ALL;
col_set_str(actx->pinfo->cinfo, COL_INFO, "unidirectional ");
#.FN_HDR PackageType/queryWithPerm
gp_tcapsrt_info->ope=TC_ANSI_ALL;
col_set_str(actx->pinfo->cinfo, COL_INFO, "queryWithPerm ");
#.FN_HDR PackageType/queryWithoutPerm
gp_tcapsrt_info->ope=TC_ANSI_ALL;
col_set_str(actx->pinfo->cinfo, COL_INFO, "queryWithoutPerm ");
#.FN_HDR PackageType/response
gp_tcapsrt_info->ope=TC_ANSI_ALL;
col_set_str(actx->pinfo->cinfo, COL_INFO, "response ");
#.FN_HDR PackageType/conversationWithPerm
gp_tcapsrt_info->ope=TC_ANSI_ALL;
col_set_str(actx->pinfo->cinfo, COL_INFO, "conversationWithPerm ");
#.FN_HDR PackageType/conversationWithoutPerm
gp_tcapsrt_info->ope=TC_ANSI_ALL;
col_set_str(actx->pinfo->cinfo, COL_INFO, "conversationWithoutPerm ");
#.FN_HDR PackageType/abort
gp_tcapsrt_info->ope=TC_ANSI_ABORT;
col_set_str(actx->pinfo->cinfo, COL_INFO, "Abort ");
#.FN_BODY TransactionID/_untag VAL_PTR = &next_tvb
tvbuff_t *next_tvb;
guint8 len;
%(DEFAULT_BODY)s
if(next_tvb) {
len = tvb_length_remaining(next_tvb, 0);
if(len !=0){
/* 0 octets for the Unidirectional,
* 4 octets for Query, Response & Abort
* 8 octets for Conversation in the order Originating then Responding TID
*
* In order to match this it seems like we should only use the last 4 octets
* in the 8 octets case.
*/
if (len > 4){
ansi_tcap_private.TransactionID_str = tvb_bytes_to_str(next_tvb, 4,len-4);
}else{
ansi_tcap_private.TransactionID_str = tvb_bytes_to_str(next_tvb, 0,len);
}
}
switch(len) {
case 1:
gp_tcapsrt_info->src_tid=tvb_get_guint8(next_tvb, 0);
break;
case 2:
gp_tcapsrt_info->src_tid=tvb_get_ntohs(next_tvb, 0);
break;
case 4:
gp_tcapsrt_info->src_tid=tvb_get_ntohl(next_tvb, 0);
break;
default:
gp_tcapsrt_info->src_tid=0;
break;
}
}
#.END
|