/src/wireshark/epan/dissectors/packet-coseventcomm.c
Line | Count | Source |
1 | | /* packet-coseventcomm.c |
2 | | * |
3 | | * Routines for IDL dissection |
4 | | * |
5 | | * Autogenerated from idl2wrs |
6 | | * Copyright 2001 Frank Singleton <frank.singleton@ericsson.com> |
7 | | */ |
8 | | |
9 | | |
10 | | /* |
11 | | * Wireshark - Network traffic analyzer |
12 | | * By Gerald Combs <gerald@wireshark.org> |
13 | | * Copyright 1998 Gerald Combs |
14 | | */ |
15 | | |
16 | | /* |
17 | | * SPDX-License-Identifier: GPL-2.0-or-later |
18 | | */ |
19 | | |
20 | | |
21 | | #include "config.h" |
22 | | |
23 | | #include <string.h> |
24 | | #include <epan/packet.h> |
25 | | #include <epan/proto.h> |
26 | | #include "packet-giop.h" |
27 | | #include <epan/expert.h> |
28 | | #include <wsutil/array.h> |
29 | | |
30 | | #include "ws_diag_control.h" |
31 | | #include "ws_compiler_tests.h" |
32 | | |
33 | | #ifdef _MSC_VER |
34 | | /* disable warning: "unreference local variable" */ |
35 | | #pragma warning(disable:4101) |
36 | | #endif |
37 | | |
38 | | /* XXX this should be autogenerated, or the warnings fixed in the generator */ |
39 | | DIAG_OFF(unused-function) |
40 | | DIAG_OFF(unused-variable) |
41 | | #if WS_IS_AT_LEAST_GNUC_VERSION(6,0) |
42 | | DIAG_OFF(unused-const-variable) |
43 | | #endif |
44 | | |
45 | | void proto_register_giop_coseventcomm(void); |
46 | | void proto_reg_handoff_giop_coseventcomm(void); |
47 | | |
48 | | /* Initialise the protocol and subtree pointers */ |
49 | | static int proto_coseventcomm; |
50 | | static int ett_coseventcomm; |
51 | | static int ett_giop_struct; |
52 | | static int ett_giop_sequence; |
53 | | static int ett_giop_array; |
54 | | static int ett_giop_union; |
55 | | |
56 | | |
57 | | /* Initialise the initial Alignment */ |
58 | | static uint32_t boundary = GIOP_HEADER_SIZE; /* initial value */ |
59 | | |
60 | | static int hf_operationrequest;/* Request_Operation field */ |
61 | | |
62 | | /* Operation filters */ |
63 | | static int hf_CosEventComm_PullSupplier_try_pull_has_event; |
64 | | /* User exception filters */ |
65 | | /* Expert info filters */ |
66 | | static expert_field ei_coseventcomm_unknown_giop_msg; |
67 | | static expert_field ei_coseventcomm_unknown_exception; |
68 | | static expert_field ei_coseventcomm_unknown_reply_status; |
69 | | |
70 | | |
71 | | static proto_tree *start_dissecting(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ptree, int *offset); |
72 | | |
73 | | |
74 | | /* Begin Exception Helper Functions */ |
75 | | |
76 | | |
77 | | |
78 | | /* End Exception Helper Functions */ |
79 | | |
80 | | /* |
81 | | * Main delegator for exception handling |
82 | | * |
83 | | */ |
84 | | static bool |
85 | | decode_user_exception(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *ptree _U_, int *offset _U_, MessageHeader *header, const char *operation _U_, bool stream_is_big_endian _U_) |
86 | 0 | { |
87 | 0 | proto_tree *tree _U_; |
88 | |
|
89 | 0 | if (!header->exception_id) |
90 | 0 | return false; |
91 | | |
92 | | |
93 | 0 | return false; /* user exception not found */ |
94 | 0 | } |
95 | | |
96 | | /* |
97 | | * IDL:omg.org/CosEventComm/PullConsumer/disconnect_pull_consumer:1.0 |
98 | | */ |
99 | | static void |
100 | | decode_CosEventComm_PullConsumer_disconnect_pull_consumer(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, proto_item *item _U_, int *offset _U_, MessageHeader *header, const char *operation _U_, bool stream_is_big_endian _U_) |
101 | 0 | { |
102 | | /* Operation specific Variable declarations Begin */ |
103 | 0 | _U_ wmem_stack_t *tree_stack = wmem_stack_new(pinfo->pool); |
104 | 0 | _U_ int old_offset; |
105 | | /* Operation specific Variable declarations End */ |
106 | |
|
107 | 0 | switch(header->message_type) { |
108 | 0 | case Request: |
109 | 0 | break; |
110 | 0 | case Reply: |
111 | 0 | switch(header->rep_status) { |
112 | 0 | case NO_EXCEPTION: |
113 | | /* Function returns void */ |
114 | |
|
115 | 0 | break; |
116 | 0 | case USER_EXCEPTION: |
117 | 0 | break; |
118 | 0 | default: |
119 | | /* Unknown Exception */ |
120 | 0 | expert_add_info_format(pinfo, item, &ei_coseventcomm_unknown_exception, "Unknown exception %d", header->rep_status); |
121 | 0 | break; |
122 | 0 | } /* switch(header->rep_status) */ |
123 | | |
124 | 0 | break; |
125 | 0 | default: |
126 | | /* Unknown GIOP Message */ |
127 | 0 | expert_add_info_format(pinfo, item, &ei_coseventcomm_unknown_giop_msg, "Unknown GIOP message %d", header->message_type); |
128 | 0 | break; |
129 | 0 | } /* switch(header->message_type) */ |
130 | 0 | } |
131 | | |
132 | | /* |
133 | | * IDL:omg.org/CosEventComm/PullSupplier/disconnect_pull_supplier:1.0 |
134 | | */ |
135 | | static void |
136 | | decode_CosEventComm_PullSupplier_disconnect_pull_supplier(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, proto_item *item _U_, int *offset _U_, MessageHeader *header, const char *operation _U_, bool stream_is_big_endian _U_) |
137 | 0 | { |
138 | | /* Operation specific Variable declarations Begin */ |
139 | 0 | _U_ wmem_stack_t *tree_stack = wmem_stack_new(pinfo->pool); |
140 | 0 | _U_ int old_offset; |
141 | | /* Operation specific Variable declarations End */ |
142 | |
|
143 | 0 | switch(header->message_type) { |
144 | 0 | case Request: |
145 | 0 | break; |
146 | 0 | case Reply: |
147 | 0 | switch(header->rep_status) { |
148 | 0 | case NO_EXCEPTION: |
149 | | /* Function returns void */ |
150 | |
|
151 | 0 | break; |
152 | 0 | case USER_EXCEPTION: |
153 | 0 | break; |
154 | 0 | default: |
155 | | /* Unknown Exception */ |
156 | 0 | expert_add_info_format(pinfo, item, &ei_coseventcomm_unknown_exception, "Unknown exception %d", header->rep_status); |
157 | 0 | break; |
158 | 0 | } /* switch(header->rep_status) */ |
159 | | |
160 | 0 | break; |
161 | 0 | default: |
162 | | /* Unknown GIOP Message */ |
163 | 0 | expert_add_info_format(pinfo, item, &ei_coseventcomm_unknown_giop_msg, "Unknown GIOP message %d", header->message_type); |
164 | 0 | break; |
165 | 0 | } /* switch(header->message_type) */ |
166 | 0 | } |
167 | | |
168 | | /* |
169 | | * IDL:omg.org/CosEventComm/PullSupplier/try_pull:1.0 |
170 | | */ |
171 | | static void |
172 | | decode_CosEventComm_PullSupplier_try_pull(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, proto_item *item _U_, int *offset _U_, MessageHeader *header, const char *operation _U_, bool stream_is_big_endian _U_) |
173 | 0 | { |
174 | | /* Operation specific Variable declarations Begin */ |
175 | 0 | _U_ wmem_stack_t *tree_stack = wmem_stack_new(pinfo->pool); |
176 | 0 | _U_ int old_offset; |
177 | | /* Operation specific Variable declarations End */ |
178 | |
|
179 | 0 | switch(header->message_type) { |
180 | 0 | case Request: |
181 | 0 | break; |
182 | 0 | case Reply: |
183 | 0 | switch(header->rep_status) { |
184 | 0 | case NO_EXCEPTION: |
185 | 0 | get_CDR_any(tvb, pinfo, tree, item, offset, stream_is_big_endian, boundary, header); |
186 | |
|
187 | 0 | old_offset = *offset; |
188 | 0 | proto_tree_add_boolean(tree, hf_CosEventComm_PullSupplier_try_pull_has_event, tvb, old_offset, 1, get_CDR_boolean(tvb,offset)); |
189 | |
|
190 | 0 | break; |
191 | 0 | case USER_EXCEPTION: |
192 | 0 | break; |
193 | 0 | default: |
194 | | /* Unknown Exception */ |
195 | 0 | expert_add_info_format(pinfo, item, &ei_coseventcomm_unknown_exception, "Unknown exception %d", header->rep_status); |
196 | 0 | break; |
197 | 0 | } /* switch(header->rep_status) */ |
198 | | |
199 | 0 | break; |
200 | 0 | default: |
201 | | /* Unknown GIOP Message */ |
202 | 0 | expert_add_info_format(pinfo, item, &ei_coseventcomm_unknown_giop_msg, "Unknown GIOP message %d", header->message_type); |
203 | 0 | break; |
204 | 0 | } /* switch(header->message_type) */ |
205 | 0 | } |
206 | | |
207 | | /* |
208 | | * IDL:omg.org/CosEventComm/PullSupplier/pull:1.0 |
209 | | */ |
210 | | static void |
211 | | decode_CosEventComm_PullSupplier_pull(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, proto_item *item _U_, int *offset _U_, MessageHeader *header, const char *operation _U_, bool stream_is_big_endian _U_) |
212 | 0 | { |
213 | | /* Operation specific Variable declarations Begin */ |
214 | 0 | _U_ wmem_stack_t *tree_stack = wmem_stack_new(pinfo->pool); |
215 | 0 | _U_ int old_offset; |
216 | | /* Operation specific Variable declarations End */ |
217 | |
|
218 | 0 | switch(header->message_type) { |
219 | 0 | case Request: |
220 | 0 | break; |
221 | 0 | case Reply: |
222 | 0 | switch(header->rep_status) { |
223 | 0 | case NO_EXCEPTION: |
224 | 0 | get_CDR_any(tvb, pinfo, tree, item, offset, stream_is_big_endian, boundary, header); |
225 | |
|
226 | 0 | break; |
227 | 0 | case USER_EXCEPTION: |
228 | 0 | break; |
229 | 0 | default: |
230 | | /* Unknown Exception */ |
231 | 0 | expert_add_info_format(pinfo, item, &ei_coseventcomm_unknown_exception, "Unknown exception %d", header->rep_status); |
232 | 0 | break; |
233 | 0 | } /* switch(header->rep_status) */ |
234 | | |
235 | 0 | break; |
236 | 0 | default: |
237 | | /* Unknown GIOP Message */ |
238 | 0 | expert_add_info_format(pinfo, item, &ei_coseventcomm_unknown_giop_msg, "Unknown GIOP message %d", header->message_type); |
239 | 0 | break; |
240 | 0 | } /* switch(header->message_type) */ |
241 | 0 | } |
242 | | |
243 | | /* |
244 | | * IDL:omg.org/CosEventComm/PushSupplier/disconnect_push_supplier:1.0 |
245 | | */ |
246 | | static void |
247 | | decode_CosEventComm_PushSupplier_disconnect_push_supplier(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, proto_item *item _U_, int *offset _U_, MessageHeader *header, const char *operation _U_, bool stream_is_big_endian _U_) |
248 | 0 | { |
249 | | /* Operation specific Variable declarations Begin */ |
250 | 0 | _U_ wmem_stack_t *tree_stack = wmem_stack_new(pinfo->pool); |
251 | 0 | _U_ int old_offset; |
252 | | /* Operation specific Variable declarations End */ |
253 | |
|
254 | 0 | switch(header->message_type) { |
255 | 0 | case Request: |
256 | 0 | break; |
257 | 0 | case Reply: |
258 | 0 | switch(header->rep_status) { |
259 | 0 | case NO_EXCEPTION: |
260 | | /* Function returns void */ |
261 | |
|
262 | 0 | break; |
263 | 0 | case USER_EXCEPTION: |
264 | 0 | break; |
265 | 0 | default: |
266 | | /* Unknown Exception */ |
267 | 0 | expert_add_info_format(pinfo, item, &ei_coseventcomm_unknown_exception, "Unknown exception %d", header->rep_status); |
268 | 0 | break; |
269 | 0 | } /* switch(header->rep_status) */ |
270 | | |
271 | 0 | break; |
272 | 0 | default: |
273 | | /* Unknown GIOP Message */ |
274 | 0 | expert_add_info_format(pinfo, item, &ei_coseventcomm_unknown_giop_msg, "Unknown GIOP message %d", header->message_type); |
275 | 0 | break; |
276 | 0 | } /* switch(header->message_type) */ |
277 | 0 | } |
278 | | |
279 | | /* |
280 | | * IDL:omg.org/CosEventComm/PushConsumer/disconnect_push_consumer:1.0 |
281 | | */ |
282 | | static void |
283 | | decode_CosEventComm_PushConsumer_disconnect_push_consumer(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, proto_item *item _U_, int *offset _U_, MessageHeader *header, const char *operation _U_, bool stream_is_big_endian _U_) |
284 | 0 | { |
285 | | /* Operation specific Variable declarations Begin */ |
286 | 0 | _U_ wmem_stack_t *tree_stack = wmem_stack_new(pinfo->pool); |
287 | 0 | _U_ int old_offset; |
288 | | /* Operation specific Variable declarations End */ |
289 | |
|
290 | 0 | switch(header->message_type) { |
291 | 0 | case Request: |
292 | 0 | break; |
293 | 0 | case Reply: |
294 | 0 | switch(header->rep_status) { |
295 | 0 | case NO_EXCEPTION: |
296 | | /* Function returns void */ |
297 | |
|
298 | 0 | break; |
299 | 0 | case USER_EXCEPTION: |
300 | 0 | break; |
301 | 0 | default: |
302 | | /* Unknown Exception */ |
303 | 0 | expert_add_info_format(pinfo, item, &ei_coseventcomm_unknown_exception, "Unknown exception %d", header->rep_status); |
304 | 0 | break; |
305 | 0 | } /* switch(header->rep_status) */ |
306 | | |
307 | 0 | break; |
308 | 0 | default: |
309 | | /* Unknown GIOP Message */ |
310 | 0 | expert_add_info_format(pinfo, item, &ei_coseventcomm_unknown_giop_msg, "Unknown GIOP message %d", header->message_type); |
311 | 0 | break; |
312 | 0 | } /* switch(header->message_type) */ |
313 | 0 | } |
314 | | |
315 | | /* |
316 | | * IDL:omg.org/CosEventComm/PushConsumer/push:1.0 |
317 | | */ |
318 | | static void |
319 | | decode_CosEventComm_PushConsumer_push(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, proto_item *item _U_, int *offset _U_, MessageHeader *header, const char *operation _U_, bool stream_is_big_endian _U_) |
320 | 0 | { |
321 | | /* Operation specific Variable declarations Begin */ |
322 | 0 | _U_ wmem_stack_t *tree_stack = wmem_stack_new(pinfo->pool); |
323 | 0 | _U_ int old_offset; |
324 | | /* Operation specific Variable declarations End */ |
325 | |
|
326 | 0 | switch(header->message_type) { |
327 | 0 | case Request: |
328 | 0 | get_CDR_any(tvb, pinfo, tree, item, offset, stream_is_big_endian, boundary, header); |
329 | |
|
330 | 0 | break; |
331 | 0 | case Reply: |
332 | 0 | switch(header->rep_status) { |
333 | 0 | case NO_EXCEPTION: |
334 | | /* Function returns void */ |
335 | |
|
336 | 0 | break; |
337 | 0 | case USER_EXCEPTION: |
338 | 0 | break; |
339 | 0 | default: |
340 | | /* Unknown Exception */ |
341 | 0 | expert_add_info_format(pinfo, item, &ei_coseventcomm_unknown_exception, "Unknown exception %d", header->rep_status); |
342 | 0 | break; |
343 | 0 | } /* switch(header->rep_status) */ |
344 | | |
345 | 0 | break; |
346 | 0 | default: |
347 | | /* Unknown GIOP Message */ |
348 | 0 | expert_add_info_format(pinfo, item, &ei_coseventcomm_unknown_giop_msg, "Unknown GIOP message %d", header->message_type); |
349 | 0 | break; |
350 | 0 | } /* switch(header->message_type) */ |
351 | 0 | } |
352 | | |
353 | | /* |
354 | | * Called once we accept the packet as being for us; it sets the |
355 | | * Protocol and Info columns and creates the top-level protocol |
356 | | * tree item. |
357 | | */ |
358 | | static proto_tree * |
359 | | start_dissecting(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ptree, int *offset) |
360 | 0 | { |
361 | |
|
362 | 0 | proto_item *ti = NULL; |
363 | 0 | proto_tree *tree = NULL; /* init later, inside if(tree) */ |
364 | |
|
365 | 0 | col_set_str(pinfo->cinfo, COL_PROTOCOL, "COSEVENTCOMM"); |
366 | | |
367 | | /* |
368 | | * Do not clear COL_INFO, as nothing is being written there by |
369 | | * this dissector yet. So leave it as is from the GIOP dissector. |
370 | | * TODO: add something useful to COL_INFO |
371 | | * col_clear(pinfo->cinfo, COL_INFO); |
372 | | */ |
373 | |
|
374 | 0 | if (ptree) { |
375 | 0 | ti = proto_tree_add_item(ptree, proto_coseventcomm, tvb, *offset, tvb_reported_length_remaining(tvb, *offset), ENC_NA); |
376 | 0 | tree = proto_item_add_subtree(ti, ett_coseventcomm); |
377 | 0 | } |
378 | 0 | return tree; |
379 | 0 | } |
380 | | |
381 | | static proto_item* |
382 | | process_RequestOperation(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ptree, MessageHeader *header, const char *operation) |
383 | 0 | { |
384 | 0 | proto_item *pi; |
385 | 0 | if(header->message_type == Reply) { |
386 | | /* fill-up info column */ |
387 | 0 | col_append_fstr(pinfo->cinfo, COL_INFO, " op = %s",operation); |
388 | 0 | } |
389 | | /* fill-up the field */ |
390 | 0 | pi=proto_tree_add_string(ptree, hf_operationrequest, tvb, 0, 0, operation); |
391 | 0 | proto_item_set_generated(pi); |
392 | 0 | return pi; |
393 | 0 | } |
394 | | |
395 | | static bool |
396 | | dissect_coseventcomm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ptree, int *offset, MessageHeader *header, const char *operation, char *idlname) |
397 | 46 | { |
398 | 46 | proto_item *item _U_; |
399 | 46 | proto_tree *tree _U_; |
400 | 46 | bool stream_is_big_endian = is_big_endian(header); /* get endianness */ |
401 | | |
402 | | /* If we have a USER Exception, then decode it and return */ |
403 | 46 | if ((header->message_type == Reply) && (header->rep_status == USER_EXCEPTION)) { |
404 | 0 | return decode_user_exception(tvb, pinfo, ptree, offset, header, operation, stream_is_big_endian); |
405 | 0 | } |
406 | | |
407 | 46 | switch(header->message_type) { |
408 | | |
409 | 46 | case Request: |
410 | 46 | case Reply: |
411 | | |
412 | 46 | if (strcmp(operation, "disconnect_pull_consumer") == 0 |
413 | 0 | && (!idlname || strcmp(idlname, "CosEventComm/PullConsumer") == 0)) { |
414 | 0 | item = process_RequestOperation(tvb, pinfo, ptree, header, operation); /* fill-up Request_Operation field & info column */ |
415 | 0 | tree = start_dissecting(tvb, pinfo, ptree, offset); |
416 | 0 | decode_CosEventComm_PullConsumer_disconnect_pull_consumer(tvb, pinfo, tree, item, offset, header, operation, stream_is_big_endian); |
417 | 0 | return true; |
418 | 0 | } |
419 | | |
420 | 46 | if (strcmp(operation, "disconnect_pull_supplier") == 0 |
421 | 0 | && (!idlname || strcmp(idlname, "CosEventComm/PullSupplier") == 0)) { |
422 | 0 | item = process_RequestOperation(tvb, pinfo, ptree, header, operation); /* fill-up Request_Operation field & info column */ |
423 | 0 | tree = start_dissecting(tvb, pinfo, ptree, offset); |
424 | 0 | decode_CosEventComm_PullSupplier_disconnect_pull_supplier(tvb, pinfo, tree, item, offset, header, operation, stream_is_big_endian); |
425 | 0 | return true; |
426 | 0 | } |
427 | | |
428 | 46 | if (strcmp(operation, "try_pull") == 0 |
429 | 0 | && (!idlname || strcmp(idlname, "CosEventComm/PullSupplier") == 0)) { |
430 | 0 | item = process_RequestOperation(tvb, pinfo, ptree, header, operation); /* fill-up Request_Operation field & info column */ |
431 | 0 | tree = start_dissecting(tvb, pinfo, ptree, offset); |
432 | 0 | decode_CosEventComm_PullSupplier_try_pull(tvb, pinfo, tree, item, offset, header, operation, stream_is_big_endian); |
433 | 0 | return true; |
434 | 0 | } |
435 | | |
436 | 46 | if (strcmp(operation, "pull") == 0 |
437 | 0 | && (!idlname || strcmp(idlname, "CosEventComm/PullSupplier") == 0)) { |
438 | 0 | item = process_RequestOperation(tvb, pinfo, ptree, header, operation); /* fill-up Request_Operation field & info column */ |
439 | 0 | tree = start_dissecting(tvb, pinfo, ptree, offset); |
440 | 0 | decode_CosEventComm_PullSupplier_pull(tvb, pinfo, tree, item, offset, header, operation, stream_is_big_endian); |
441 | 0 | return true; |
442 | 0 | } |
443 | | |
444 | 46 | if (strcmp(operation, "disconnect_push_supplier") == 0 |
445 | 0 | && (!idlname || strcmp(idlname, "CosEventComm/PushSupplier") == 0)) { |
446 | 0 | item = process_RequestOperation(tvb, pinfo, ptree, header, operation); /* fill-up Request_Operation field & info column */ |
447 | 0 | tree = start_dissecting(tvb, pinfo, ptree, offset); |
448 | 0 | decode_CosEventComm_PushSupplier_disconnect_push_supplier(tvb, pinfo, tree, item, offset, header, operation, stream_is_big_endian); |
449 | 0 | return true; |
450 | 0 | } |
451 | | |
452 | 46 | if (strcmp(operation, "disconnect_push_consumer") == 0 |
453 | 0 | && (!idlname || strcmp(idlname, "CosEventComm/PushConsumer") == 0)) { |
454 | 0 | item = process_RequestOperation(tvb, pinfo, ptree, header, operation); /* fill-up Request_Operation field & info column */ |
455 | 0 | tree = start_dissecting(tvb, pinfo, ptree, offset); |
456 | 0 | decode_CosEventComm_PushConsumer_disconnect_push_consumer(tvb, pinfo, tree, item, offset, header, operation, stream_is_big_endian); |
457 | 0 | return true; |
458 | 0 | } |
459 | | |
460 | 46 | if (strcmp(operation, "push") == 0 |
461 | 0 | && (!idlname || strcmp(idlname, "CosEventComm/PushConsumer") == 0)) { |
462 | 0 | item = process_RequestOperation(tvb, pinfo, ptree, header, operation); /* fill-up Request_Operation field & info column */ |
463 | 0 | tree = start_dissecting(tvb, pinfo, ptree, offset); |
464 | 0 | decode_CosEventComm_PushConsumer_push(tvb, pinfo, tree, item, offset, header, operation, stream_is_big_endian); |
465 | 0 | return true; |
466 | 0 | } |
467 | | |
468 | 46 | break; |
469 | | |
470 | 46 | case CancelRequest: |
471 | 0 | case LocateRequest: |
472 | 0 | case LocateReply: |
473 | 0 | case CloseConnection: |
474 | 0 | case MessageError: |
475 | 0 | case Fragment: |
476 | 0 | return false; /* not handled yet */ |
477 | | |
478 | 0 | default: |
479 | 0 | return false; /* not handled yet */ |
480 | | |
481 | 46 | } /* switch */ |
482 | | |
483 | | |
484 | 46 | return false; |
485 | | |
486 | 46 | } /* End of main dissector */ |
487 | | |
488 | | |
489 | | /* Register the protocol with Wireshark */ |
490 | | void proto_register_giop_coseventcomm(void) |
491 | 16 | { |
492 | | /* setup list of header fields */ |
493 | 16 | static hf_register_info hf[] = { |
494 | | /* field that indicates the currently ongoing request/reply exchange */ |
495 | 16 | {&hf_operationrequest, {"Request_Operation","giop-coseventcomm.Request_Operation",FT_STRING,BASE_NONE,NULL,0x0,NULL,HFILL}}, |
496 | | /* Operation filters */ |
497 | 16 | {&hf_CosEventComm_PullSupplier_try_pull_has_event, {"has_event","giop-coseventcomm.PullSupplier.try_pull.has_event",FT_BOOLEAN,8,NULL,0x01,NULL,HFILL}}, |
498 | | /* Attribute filters */ |
499 | | /* Struct filters */ |
500 | | /* User exception filters */ |
501 | | /* Union filters */ |
502 | | |
503 | 16 | }; |
504 | | |
505 | 16 | static ei_register_info ei[] = { |
506 | 16 | { &ei_coseventcomm_unknown_giop_msg, { "giop-coseventcomm.unknown_giop_msg", PI_PROTOCOL, PI_WARN, "Unknown GIOP message", EXPFILL }}, |
507 | 16 | { &ei_coseventcomm_unknown_exception, { "giop-coseventcomm.unknown_exception", PI_PROTOCOL, PI_WARN, "Unknown exception", EXPFILL }}, |
508 | 16 | { &ei_coseventcomm_unknown_reply_status, { "giop-coseventcomm.unknown_reply_status", PI_PROTOCOL, PI_WARN, "Unknown reply status", EXPFILL }}, |
509 | 16 | }; |
510 | | |
511 | | /* setup protocol subtree array */ |
512 | | |
513 | 16 | static int *ett[] = { |
514 | 16 | &ett_coseventcomm, |
515 | 16 | &ett_giop_struct, |
516 | 16 | &ett_giop_sequence, |
517 | 16 | &ett_giop_array, |
518 | 16 | &ett_giop_union, |
519 | 16 | }; |
520 | | |
521 | 16 | expert_module_t* expert_coseventcomm; |
522 | | |
523 | | |
524 | | /* Register the protocol name and description */ |
525 | 16 | proto_coseventcomm = proto_register_protocol("Coseventcomm Dissector Using GIOP API" , "GIOP/COSEVENTCOMM", "giop-coseventcomm" ); |
526 | 16 | proto_register_field_array(proto_coseventcomm, hf, array_length(hf)); |
527 | 16 | proto_register_subtree_array(ett, array_length(ett)); |
528 | | |
529 | 16 | expert_coseventcomm = expert_register_protocol(proto_coseventcomm); |
530 | 16 | expert_register_field_array(expert_coseventcomm, ei, array_length(ei)); |
531 | 16 | } |
532 | | |
533 | | /* register me as handler for these interfaces */ |
534 | | void proto_reg_handoff_giop_coseventcomm(void) |
535 | 16 | { |
536 | | /* Register for Explicit Dissection */ |
537 | 16 | register_giop_user_module(dissect_coseventcomm, "COSEVENTCOMM", "CosEventComm/PullConsumer", proto_coseventcomm ); /* explicit dissector */ |
538 | | |
539 | | /* Register for Explicit Dissection */ |
540 | 16 | register_giop_user_module(dissect_coseventcomm, "COSEVENTCOMM", "CosEventComm/PullSupplier", proto_coseventcomm ); /* explicit dissector */ |
541 | | |
542 | | /* Register for Explicit Dissection */ |
543 | 16 | register_giop_user_module(dissect_coseventcomm, "COSEVENTCOMM", "CosEventComm/PushConsumer", proto_coseventcomm ); /* explicit dissector */ |
544 | | |
545 | | /* Register for Explicit Dissection */ |
546 | 16 | register_giop_user_module(dissect_coseventcomm, "COSEVENTCOMM", "CosEventComm/PushSupplier", proto_coseventcomm ); /* explicit dissector */ |
547 | | |
548 | | /* Register for Heuristic Dissection */ |
549 | 16 | register_giop_user(dissect_coseventcomm, "COSEVENTCOMM" ,proto_coseventcomm); /* heuristic dissector */ |
550 | | |
551 | 16 | } |
552 | | |
553 | | /* |
554 | | * Editor modelines - https://www.wireshark.org/tools/modelines.html |
555 | | * |
556 | | * Local Variables: |
557 | | * c-basic-offset: 4 |
558 | | * tab-width: 8 |
559 | | * indent-tabs-mode: nil |
560 | | * End: |
561 | | * |
562 | | * ex: set shiftwidth=4 tabstop=8 expandtab: |
563 | | * :indentSize=4:tabSize=8:noTabs=true: |
564 | | */ |