Second step in introducing asn context to BER dissectors just like in PER.
[obnox/wireshark/wip.git] / asn1 / h248 / h248.cnf
1 # h248.cnf
2 # H.248 conformation file
3
4 # $Id$
5
6 #.MODULE_IMPORT
7
8 #.EXPORTS
9
10 #.PDU
11
12 #.NO_EMIT
13 MtpAddress
14 PkgdName
15 ErrorCode
16 PropertyID
17 SignalName
18 SigParameterName
19 SigParamValue
20 EventName
21 EventParameterName
22 EventParamValue
23 ContextID
24
25 #.TYPE_RENAME
26 IndAudMediaDescriptor/streams                   indAudMediaDescriptorStreams
27 ActionRequest/contextId                                 contextId
28 ActionReply/contextId                                   contextId
29 TransactionRequest/transactionId                transactionId
30 TransactionPending/transactionId                transactionId
31 TransactionReply/transactionId                  transactionId
32 StatisticsParameter/statName                    StatName
33 StatisticsParameter/statValue                   StatValue
34 PropertyParm/propertyName                               PropertyName
35
36 #.FIELD_RENAME
37 IP4Address/address              iP4Address
38 IP6Address/address              iP6Address
39 ContextAttrAuditRequest/emergency       cAAREmergency
40 ContextAttrAuditRequest/priority        cAARPriority
41 SecondRequestedEvent/eventAction        secondaryEventAction
42 TerminationStateDescriptor/eventBufferControl   tSEventBufferControl
43 SecondEventsDescriptor/eventList        secondaryEventList
44 IndAudEventBufferDescriptor/eventName   iAEBDEventName
45 TerminationID/id                        terminationId
46 IndAudStreamParms/localControlDescriptor iASPLocalControlDescriptor
47 IndAudStreamParms/localDescriptor       iASPLocalDescriptor
48 MediaDescriptor/streams/oneStream       mediaDescriptorOneStream
49 MediaDescriptor/streams/multiStream     mediaDescriptorMultiStream
50 MediaDescriptor/streams/multiStream/_item       mediaDescriptorMultiStream_item
51 DomainName/name                         domName
52 IndAudEventsDescriptor/pkgdName         iAEDPkgdName
53 IndAudLocalRemoteDescriptor/propGrps    iAPropertyGroup
54 IndAudLocalControlDescriptor/propertyParms      indAudPropertyParms
55 IndAudTerminationStateDescriptor/propertyParms  indAudPropertyParms
56 IndAudLocalControlDescriptor/reserveGroup       iALCDReserveGroup
57 IndAudLocalControlDescriptor/reserveValue       iALCDReserveValue
58 IndAudLocalControlDescriptor/streamMode         iALCDStreamMode
59 IndAudStreamDescriptor/streamParms              indAudStreamParms
60 IndAudMediaDescriptor/termStateDescr            indAudTerminationStateDescriptor
61 IndAudSignal/signalName                         iASignalName
62 IndAudSeqSigList/signalList                     iASignalList
63 IndAudSignalsDescriptor/signal                  indAudSignal
64 IndAudSignalsDescriptor/seqSigList              indAudSeqSigList
65 IndAudTerminationStateDescriptor/serviceState   iATSDServiceState
66 IndAudStreamParms/remoteDescriptor              iASPRemoteDescriptor
67 PropertyParm/value                              propertyParamValue
68 IndAudMediaDescriptor/streams                   indAudMediaDescriptorStreams
69 AmmRequest/terminationID                        terminationIDList
70 AmmsReply/terminationID                 terminationIDList
71 SubtractRequest/terminationID                   terminationIDList
72 NotifyRequest/terminationID                     terminationIDList
73 NotifyReply/terminationID                       terminationIDList
74 ServiceChangeRequest/terminationID                      terminationIDList
75 ServiceChangeReply/terminationID                        terminationIDList
76 IndAudStatisticsDescriptor/statName             iAStatName
77
78
79 #.FN_HDR Message
80     curr_info.msg = gcp_msg(actx->pinfo,TVB_RAW_OFFSET(tvb),keep_persistent_data);
81 #.END
82
83 #.FN_FTR Message
84     if (check_col(actx->pinfo->cinfo, COL_INFO))
85         col_set_str(actx->pinfo->cinfo, COL_INFO, gcp_msg_to_str(curr_info.msg,keep_persistent_data));
86         
87     if (keep_persistent_data)
88         gcp_analyze_msg(h248_tree, h248_tvb, curr_info.msg, &h248_arrel);
89 #.END
90
91 #.FN_BODY TransactionRequest/transactionId
92     guint32 trx_id = 0;
93         offset = dissect_h248_trx_id(implicit_tag, actx->pinfo, tree, tvb, offset, &trx_id);
94     curr_info.trx = gcp_trx(curr_info.msg, trx_id, GCP_TRX_REQUEST, keep_persistent_data);
95     error_code = 0;
96 #.END
97
98 #.FN_BODY ActionRequest/contextId
99     guint32 ctx_id = 0;
100         offset = dissect_h248_ctx_id(implicit_tag, actx->pinfo, tree, tvb, offset, &ctx_id);
101     curr_info.ctx = gcp_ctx(curr_info.msg,curr_info.trx,ctx_id,keep_persistent_data);
102     curr_info.cmd = NULL;
103     curr_info.term = NULL;
104 #.END
105
106 #.FN_FTR ActionReply
107     if (!curr_info.cmd) {
108           curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_REPLY,offset,keep_persistent_data);
109       H248_TAP();
110         }
111 #.END
112
113 #.FN_HDR Command/addReq
114           curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_ADD_REQ,offset,keep_persistent_data);
115       H248_TAP();
116 #.END
117
118 #.FN_FTR Command/addReq
119       curr_info.cmd = NULL;
120 #.END
121
122 #.FN_HDR Command/moveReq
123           curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_MOVE_REQ,offset,keep_persistent_data);
124       H248_TAP();
125
126 #.END
127
128 #.FN_FTR Command/moveReq
129       curr_info.cmd = NULL;
130 #.END
131
132 #.FN_HDR Command/modReq
133           curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_MOD_REQ,offset,keep_persistent_data);
134       H248_TAP();
135 #.END
136 #.FN_FTR Command/modReq
137       curr_info.cmd = NULL;
138 #.END
139
140 #.FN_HDR Command/subtractReq
141           curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_SUB_REQ,offset,keep_persistent_data);
142       H248_TAP();
143 #.END
144 #.FN_FTR Command/subtractReq
145       curr_info.cmd = NULL;
146 #.END
147
148 #.FN_HDR Command/auditCapRequest
149           curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_AUDITCAP_REQ,offset,keep_persistent_data);
150       H248_TAP();
151 #.END
152 #.FN_FTR Command/auditCapRequest
153       curr_info.cmd = NULL;
154 #.END
155
156 #.FN_HDR Command/auditValueRequest
157           curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_AUDITVAL_REQ,offset,keep_persistent_data);
158       H248_TAP();
159 #.END
160 #.FN_FTR Command/auditValueRequest
161       curr_info.cmd = NULL;
162 #.END
163
164 #.FN_HDR Command/notifyReq
165           curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_NOTIFY_REQ,offset,keep_persistent_data);
166       H248_TAP();
167 #.END
168 #.FN_FTR Command/notifyReq
169       curr_info.cmd = NULL;
170 #.END
171
172 #.FN_HDR ServiceChangeRequest
173       curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_SVCCHG_REQ,offset,keep_persistent_data);
174       H248_TAP();
175 #.END
176 #.FN_FTR ServiceChangeRequest
177       curr_info.cmd = NULL;
178 #.END
179
180 #.FN_HDR ContextRequest/topologyReq
181       curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_TOPOLOGY_REQ,offset,keep_persistent_data);
182       H248_TAP();
183 #.END
184 #.FN_FTR ContextRequest/topologyReq
185       curr_info.cmd = NULL;
186 #.END
187
188 #.FN_HDR ActionRequest/contextAttrAuditReq
189       curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_CTX_ATTR_AUDIT_REQ,offset,keep_persistent_data);
190       H248_TAP();
191 #.END
192 #.FN_FTR ActionRequest/contextAttrAuditReq
193       curr_info.cmd = NULL;
194 #.END
195
196 #.FN_HDR CommandReply/addReply
197       curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_ADD_REPLY,offset,keep_persistent_data);
198       H248_TAP();
199 #.END
200
201 #.FN_HDR CommandReply/moveReply
202       curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_MOVE_REPLY,offset,keep_persistent_data);
203       H248_TAP();
204 #.END
205
206 #.FN_HDR CommandReply/modReply
207       curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_MOD_REPLY,offset,keep_persistent_data);
208       H248_TAP();
209 #.END
210
211 #.FN_HDR CommandReply/subtractReply
212       curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_SUB_REPLY,offset,keep_persistent_data);
213       H248_TAP();
214 #.END
215
216 #.FN_HDR CommandReply/notifyReply
217       curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_NOTIFY_REPLY,offset,keep_persistent_data);
218       H248_TAP();
219 #.END
220
221 #.FN_HDR ServiceChangeReply
222       curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_SVCCHG_REPLY,offset,keep_persistent_data);
223       H248_TAP();
224 #.END
225
226 #.FN_HDR CommandReply/auditCapReply
227       curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_AUDITCAP_REPLY,offset,keep_persistent_data);
228       H248_TAP();
229 #.END
230
231 #.FN_HDR CommandReply/auditValueReply
232       curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_AUDITVAL_REPLY,offset,keep_persistent_data);
233       H248_TAP();
234 #.END
235
236 #.FN_BODY ErrorDescriptor/errorCode
237     offset = dissect_ber_integer(implicit_tag, actx->pinfo, tree, tvb, offset, hf_h248_error_code, &error_code);
238     expert_add_info_format(actx->pinfo, get_ber_last_created_item(), PI_RESPONSE_CODE, PI_WARN, "Errored Command");
239     
240     if (curr_info.cmd) {
241         gcp_cmd_set_error(curr_info.cmd,error_code);
242     } else if (curr_info.trx) {
243         gcp_trx_set_error(curr_info.trx,error_code);
244     }
245     
246     return offset;
247 #.END
248
249 #.FN_HDR TerminationID
250     curr_info.term = ep_new0(gcp_term_t);
251     wild_term = GCP_WILDCARD_NONE;
252 #.END
253
254 #.FN_BODY WildcardField
255     tvbuff_t* new_tvb;
256     offset = dissect_ber_octet_string(implicit_tag, actx->pinfo, tree, tvb, offset, hf_index, &new_tvb);
257     tree = proto_item_add_subtree(get_ber_last_created_item(),ett_wildcard);
258     proto_tree_add_item(tree,hf_h248_term_wild_type,new_tvb,0,1,FALSE);
259     proto_tree_add_item(tree,hf_h248_term_wild_level,new_tvb,0,1,FALSE);
260     proto_tree_add_item(tree,hf_h248_term_wild_position,new_tvb,0,1,FALSE);
261
262     wild_term = tvb_get_guint8(new_tvb,0) & 0x80 ? GCP_WILDCARD_CHOOSE : GCP_WILDCARD_ALL;
263     
264 #.END
265
266 #.FN_BODY TerminationID/id
267         tvbuff_t* new_tvb;
268         offset = dissect_ber_octet_string(implicit_tag, actx->pinfo, tree, tvb, offset, hf_index, &new_tvb);
269         
270         if (new_tvb) {
271                 curr_info.term->len = tvb_length(new_tvb);
272                 curr_info.term->type = 0; /* unknown */
273
274                 if (curr_info.term->len) {
275                         curr_info.term->buffer = ep_tvb_memdup(new_tvb,0,curr_info.term->len);
276                         curr_info.term->str = bytes_to_str(curr_info.term->buffer,curr_info.term->len);
277                 }
278
279                 curr_info.term = gcp_cmd_add_term(curr_info.msg, curr_info.trx, curr_info.cmd, curr_info.term, wild_term, keep_persistent_data);
280
281                 if (h248_term_handle) {
282                         call_dissector(h248_term_handle, new_tvb, actx->pinfo, tree);
283                 }
284         } else {
285                 curr_info.term->len = 0;
286                 curr_info.term->buffer = (guint8*)ep_strdup("");
287                 curr_info.term->str = ep_strdup("?");
288         }
289 #.END
290
291  
292 #.FN_BODY SCreasonValueOctetStr VAL_PTR = &parameter_tvb
293
294  tvbuff_t       *parameter_tvb;
295  %(DEFAULT_BODY)s
296
297  if (!parameter_tvb)
298         return offset;
299
300  dissect_h248_ServiceChangeReasonStr(FALSE, parameter_tvb, 0, actx, tree, hf_h248_serviceChangeReasonStr);
301
302 #.TYPE_ATTR
303 IP4Address/address  TYPE = FT_IPv4  DISPLAY = BASE_NONE  STRINGS = NULL
304 IP6Address/address  TYPE = FT_IPv6  DISPLAY = BASE_NONE  STRINGS = NULL
305 ActionRequest/contextId TYPE = FT_UINT32 DISPLAY = BASE_HEX STRINGS = NULL
306 ActionReply/contextId TYPE = FT_UINT32 DISPLAY = BASE_HEX STRINGS = NULL