new Q.932 and QSIG dissectors
[obnox/wireshark/wip.git] / asn1 / q932 / q932-ros.cnf
1
2 #.PDU_NEW
3
4 RoseAPDU
5
6 #.TYPE_RENAME
7
8 Invoke/argument             InvokeArgument
9 ReturnResult/result/result  ResultArgument
10
11 #.FIELD_RENAME
12
13 Invoke/linkedId/present     linkedIdPresent
14
15 Reject/problem/invoke       invokeProblem
16 Reject/problem/returnError  returnErrorProblem
17 Reject/problem/returnResult returnResultProblem
18
19 ReturnResult/result/result  resultArgument
20
21 #--- Code ---
22
23 #.FN_HDR Code
24   code_choice = -1;
25   code_local = -1;
26   code_global = "";
27 #.FN_PARS
28 Code/local   VAL_PTR = &code_local
29 Code/global  FN_VARIANT = _str  VAL_PTR = &code_global
30 #.FN_FTR Code/local
31   code_choice = 0;
32 #.FN_FTR Code/global
33   code_choice = 1;
34 #.END
35
36 #--- Problem ---
37
38 #.FN_PARS
39 GeneralProblem       VAL_PTR = &problem_val
40 InvokeProblem        VAL_PTR = &problem_val
41 ReturnResultProblem  VAL_PTR = &problem_val
42 ReturnErrorProblem   VAL_PTR = &problem_val
43 #.FN_FTR GeneralProblem
44   strcpy(problem_str, val_to_str(problem_val, VALS(q932_ros_GeneralProblem_vals), ""));
45 #.FN_FTR InvokeProblem
46   strcpy(problem_str, val_to_str(problem_val, VALS(q932_ros_InvokeProblem_vals), ""));
47 #.FN_FTR ReturnResultProblem
48   strcpy(problem_str, val_to_str(problem_val, VALS(q932_ros_ReturnResultProblem_vals), ""));
49 #.FN_FTR ReturnErrorProblem
50   strcpy(problem_str, val_to_str(problem_val, VALS(q932_ros_ReturnErrorProblem_vals), ""));
51 #.END
52
53 #--- INVOKE ---
54
55 #.FIELD_ATTR
56 Invoke/argument  TYPE = FT_BYTES  DISPLAY = BASE_HEX
57
58 #.FN_BODY Invoke/argument
59   gint len;
60
61   len = tvb_length_remaining(tvb, offset);
62   if (len)
63     proto_tree_add_item(tree, hf_index, tvb, offset, len, FALSE);
64   arg_next_tvb = tvb_new_subset(tvb, offset, len, len);
65
66   offset += tvb_length_remaining(tvb, offset);
67
68 #.FN_HDR Invoke
69   dissector_handle_t arg_handle = NULL;
70
71   arg_next_tvb = NULL;
72 #.FN_FTR Invoke
73   if (code_choice == 0) {
74     arg_handle = dissector_get_port_handle(rose_ctx->arg_local_dissector_table, code_local);
75   } else if (code_choice == 1) {
76     arg_handle = dissector_get_string_handle(rose_ctx->arg_global_dissector_table, code_global);
77   } else {
78     arg_handle = NULL;
79   }
80
81   proto_item_append_text(proto_item_get_parent_nth(proto_tree_get_parent(tree), rose_ctx->apdu_depth), "  INV:");
82   if (!arg_handle || 
83       !proto_is_protocol_enabled(find_protocol_by_id(dissector_handle_get_protocol_index(arg_handle)))) {
84     if (code_choice == 0)
85       proto_item_append_text(proto_item_get_parent_nth(proto_tree_get_parent(tree), rose_ctx->apdu_depth), " %d", code_local);
86     else if (code_choice == 1)
87       proto_item_append_text(proto_item_get_parent_nth(proto_tree_get_parent(tree), rose_ctx->apdu_depth), " %s", code_global);
88   }
89   if (arg_next_tvb) {
90     pinfo->private_data = rose_ctx;
91     call_dissector((arg_handle)?arg_handle:data_handle, arg_next_tvb, pinfo, tree);
92   }
93 #.END
94
95
96 #--- RETURN RESULT ---
97
98 #.FIELD_ATTR
99 ReturnResult/result/result  TYPE = FT_BYTES  DISPLAY = BASE_HEX
100
101 #.FN_BODY ReturnResult/result/result
102   gint len;
103
104   len = tvb_length_remaining(tvb, offset);
105   if (len)
106     proto_tree_add_item(tree, hf_index, tvb, offset, len, FALSE);
107   res_next_tvb = tvb_new_subset(tvb, offset, len, len);
108
109   offset += tvb_length_remaining(tvb, offset);
110
111 #.FN_HDR ReturnResult
112   dissector_handle_t res_handle = NULL;
113
114   res_next_tvb = NULL;
115 #.FN_FTR ReturnResult
116   if (code_choice == 0) {
117     res_handle = dissector_get_port_handle(rose_ctx->res_local_dissector_table, code_local);
118   } else if (code_choice == 1) {
119     res_handle = dissector_get_string_handle(rose_ctx->res_global_dissector_table, code_global);
120   } else {
121     res_handle = NULL;
122   }
123
124   proto_item_append_text(proto_item_get_parent_nth(proto_tree_get_parent(tree), rose_ctx->apdu_depth), "  RES:");
125   if (!res_handle || 
126       !proto_is_protocol_enabled(find_protocol_by_id(dissector_handle_get_protocol_index(res_handle)))) {
127     if (code_choice == 0)
128       proto_item_append_text(proto_item_get_parent_nth(proto_tree_get_parent(tree), rose_ctx->apdu_depth), " %d", code_local);
129     else if (code_choice == 1)
130       proto_item_append_text(proto_item_get_parent_nth(proto_tree_get_parent(tree), rose_ctx->apdu_depth), " %s", code_global);
131   }
132   if (res_next_tvb) {
133     pinfo->private_data = rose_ctx;
134     call_dissector((res_handle)?res_handle:data_handle, res_next_tvb, pinfo, tree); 
135   }
136 #.END
137
138 #--- RETURN ERROR ---
139
140 #.FIELD_ATTR
141 ReturnError/parameter  TYPE = FT_BYTES  DISPLAY = BASE_HEX
142
143 #.FN_BODY ReturnError/parameter
144
145   gint len;
146
147   len = tvb_length_remaining(tvb, offset);
148   if (len)
149     proto_tree_add_item(tree, hf_index, tvb, offset, len, FALSE);
150   res_next_tvb = tvb_new_subset(tvb, offset, len, len);
151
152   offset += tvb_length_remaining(tvb, offset);
153
154 #.FN_HDR ReturnError
155   dissector_handle_t err_handle = NULL;
156
157   err_next_tvb = NULL;
158 #.FN_FTR ReturnError
159   if (code_choice == 0) {
160     /*err_handle = dissector_get_port_handle(rose_ctx->err_local_dissector_table, code_local);*/
161   } else if (code_choice == 1) {
162     /*err_handle = dissector_get_string_handle(rose_ctx->err_global_dissector_table, code_global);*/
163   } else {
164     err_handle = NULL;
165   }
166
167   proto_item_append_text(proto_item_get_parent_nth(proto_tree_get_parent(tree), rose_ctx->apdu_depth), "  ERR:");
168   if (!err_handle || 
169       !proto_is_protocol_enabled(find_protocol_by_id(dissector_handle_get_protocol_index(err_handle)))) {
170     if (code_choice == 0)
171       proto_item_append_text(proto_item_get_parent_nth(proto_tree_get_parent(tree), rose_ctx->apdu_depth), " %d", code_local);
172     else if (code_choice == 1)
173       proto_item_append_text(proto_item_get_parent_nth(proto_tree_get_parent(tree), rose_ctx->apdu_depth), " %s", code_global);
174   }
175   if (err_next_tvb) {
176     pinfo->private_data = rose_ctx;
177     call_dissector((err_handle)?err_handle:data_handle, err_next_tvb, pinfo, tree); 
178   }
179 #.END
180
181 #--- REJECT ---
182
183 #.FN_HDR Reject
184   problem_str[0] = '\0';
185 #.FN_FTR Reject
186   proto_item_append_text(proto_item_get_parent_nth(proto_tree_get_parent(tree), rose_ctx->apdu_depth), "  REJ: %s", problem_str);
187 #.END