aboutsummaryrefslogtreecommitdiffstats
path: root/asn1/ansi_tcap/ansi_tcap.cnf
blob: 079c9f4d9fddb9bf6a54304707e5df0b5a82be97 (plain)
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