2 * Routines for ActiveMQ OpenWire protocol
4 * metatech <metatechbe@gmail.com>
6 * Wireshark - Network traffic analyzer
7 * By Gerald Combs <gerald@wireshark.org>
8 * Copyright 1998 Gerald Combs
10 * SPDX-License-Identifier: GPL-2.0-or-later
14 OpenWire has two wire formats :
15 - "loose" : more verbose, less CPU-intensive, less network-intensive (1-pass)
16 - "tight" : more compact, more CPU-intensive, more network-intensive (2-pass)
17 This dissector only supports the "loose" syntax, which is not the default.
18 This dissector only supports version 6 of the protocol.
19 It can be changed on the broker in the activemq.xml file by specifying "tightEncodingEnabled=false" :
22 <transportConnector name="tcp-connector" uri="tcp://0.0.0.0:61616?wireFormat.tightEncodingEnabled=false&wireFormat.cacheEnabled=false"/>
23 </transportConnectors>
25 Note : The WIREFORMAT_INFO command is always sent in "loose" format.
30 #include <epan/packet.h>
31 #include <epan/exceptions.h>
32 #include <epan/prefs.h>
33 #include <epan/expert.h>
34 #include "packet-tcp.h"
36 void proto_register_openwire(void);
37 void proto_reg_handoff_openwire(void);
39 static int proto_openwire
;
40 static int hf_openwire_none
;
41 static int hf_openwire_length
;
42 static int hf_openwire_command
;
44 static int hf_openwire_command_id
;
45 static int hf_openwire_command_response_required
;
47 static int hf_openwire_response_correlationid
;
49 static int hf_openwire_dataresponse_data
;
51 static int hf_openwire_exceptionresponse_exception
;
53 static int hf_openwire_connectionerror_exception
;
54 static int hf_openwire_connectionerror_connectionid
;
56 static int hf_openwire_controlcommand_command
;
58 static int hf_openwire_wireformatinfo_magic
;
59 static int hf_openwire_wireformatinfo_version
;
60 static int hf_openwire_wireformatinfo_data
;
61 static int hf_openwire_wireformatinfo_length
;
63 static int hf_openwire_sessioninfo_sessionid
;
65 static int hf_openwire_connectioninfo_connectionid
;
66 static int hf_openwire_connectioninfo_clientid
;
67 static int hf_openwire_connectioninfo_password
;
68 static int hf_openwire_connectioninfo_username
;
69 static int hf_openwire_connectioninfo_brokerpath
;
70 static int hf_openwire_connectioninfo_brokermasterconnector
;
71 static int hf_openwire_connectioninfo_manageable
;
72 static int hf_openwire_connectioninfo_clientmaster
;
73 static int hf_openwire_connectioninfo_faulttolerant
;
74 static int hf_openwire_connectioninfo_failoverreconnect
;
76 static int hf_openwire_destinationinfo_connectionid
;
77 static int hf_openwire_destinationinfo_destination
;
78 static int hf_openwire_destinationinfo_operationtype
;
79 static int hf_openwire_destinationinfo_timeout
;
80 static int hf_openwire_destinationinfo_brokerpath
;
82 static int hf_openwire_brokerinfo_brokerid
;
83 static int hf_openwire_brokerinfo_brokerurl
;
84 static int hf_openwire_brokerinfo_peerbrokerinfos
;
85 static int hf_openwire_brokerinfo_brokername
;
86 static int hf_openwire_brokerinfo_slavebroker
;
87 static int hf_openwire_brokerinfo_masterbroker
;
88 static int hf_openwire_brokerinfo_faulttolerantconfiguration
;
89 static int hf_openwire_brokerinfo_duplexconnection
;
90 static int hf_openwire_brokerinfo_networkconnection
;
91 static int hf_openwire_brokerinfo_connectionid
;
92 static int hf_openwire_brokerinfo_brokeruploadurl
;
93 static int hf_openwire_brokerinfo_networkproperties
;
95 static int hf_openwire_connectioncontrol_close
;
96 static int hf_openwire_connectioncontrol_exit
;
97 static int hf_openwire_connectioncontrol_faulttolerant
;
98 static int hf_openwire_connectioncontrol_resume
;
99 static int hf_openwire_connectioncontrol_suspend
;
100 static int hf_openwire_connectioncontrol_connectedbrokers
;
101 static int hf_openwire_connectioncontrol_reconnectto
;
102 static int hf_openwire_connectioncontrol_rebalanceconnection
;
104 static int hf_openwire_consumercontrol_destination
;
105 static int hf_openwire_consumercontrol_close
;
106 static int hf_openwire_consumercontrol_consumerid
;
107 static int hf_openwire_consumercontrol_prefetch
;
108 static int hf_openwire_consumercontrol_flush
;
109 static int hf_openwire_consumercontrol_start
;
110 static int hf_openwire_consumercontrol_stop
;
112 static int hf_openwire_consumerinfo_consumerid
;
113 static int hf_openwire_consumerinfo_browser
;
114 static int hf_openwire_consumerinfo_destination
;
115 static int hf_openwire_consumerinfo_prefetchsize
;
116 static int hf_openwire_consumerinfo_maximumpendingmessagelimit
;
117 static int hf_openwire_consumerinfo_dispatchasync
;
118 static int hf_openwire_consumerinfo_selector
;
119 static int hf_openwire_consumerinfo_subscriptionname
;
120 static int hf_openwire_consumerinfo_nolocal
;
121 static int hf_openwire_consumerinfo_exclusive
;
122 static int hf_openwire_consumerinfo_retroactive
;
123 static int hf_openwire_consumerinfo_priority
;
124 static int hf_openwire_consumerinfo_brokerpath
;
125 static int hf_openwire_consumerinfo_additionalpredicate
;
126 static int hf_openwire_consumerinfo_networksubscription
;
127 static int hf_openwire_consumerinfo_optimizedacknowledge
;
128 static int hf_openwire_consumerinfo_norangeacks
;
129 static int hf_openwire_consumerinfo_networkconsumerpath
;
131 static int hf_openwire_producerinfo_producerid
;
132 static int hf_openwire_producerinfo_destination
;
133 static int hf_openwire_producerinfo_brokerpath
;
134 static int hf_openwire_producerinfo_dispatchasync
;
135 static int hf_openwire_producerinfo_windowsize
;
137 static int hf_openwire_removeinfo_objectid
;
138 static int hf_openwire_removeinfo_lastdeliveredsequenceid
;
140 static int hf_openwire_removesubscriptioninfo_connectionid
;
141 static int hf_openwire_removesubscriptioninfo_subscriptionname
;
142 static int hf_openwire_removesubscriptioninfo_clientid
;
144 static int hf_openwire_transactioninfo_connectionid
;
145 static int hf_openwire_transactioninfo_transactionid
;
146 static int hf_openwire_transactioninfo_type
;
148 static int hf_openwire_producerack_producerid
;
149 static int hf_openwire_producerack_size
;
152 static int hf_openwire_messagedispatch_consumerid
;
153 static int hf_openwire_messagedispatch_destination
;
154 static int hf_openwire_messagedispatch_message
;
155 static int hf_openwire_messagedispatch_redeliverycounter
;
157 static int hf_openwire_messageack_destination
;
158 static int hf_openwire_messageack_transactionid
;
159 static int hf_openwire_messageack_consumerid
;
160 static int hf_openwire_messageack_acktype
;
161 static int hf_openwire_messageack_firstmessageid
;
162 static int hf_openwire_messageack_lastmessageid
;
163 static int hf_openwire_messageack_messagecount
;
165 static int hf_openwire_messagepull_consumerid
;
166 static int hf_openwire_messagepull_destinationid
;
167 static int hf_openwire_messagepull_timeout
;
168 static int hf_openwire_messagepull_correlationid
;
169 static int hf_openwire_messagepull_messageid
;
171 static int hf_openwire_message_producerid
;
172 static int hf_openwire_message_destination
;
173 static int hf_openwire_message_transactionid
;
174 static int hf_openwire_message_originaldestination
;
175 static int hf_openwire_message_messageid
;
176 static int hf_openwire_message_originaldestinationid
;
177 static int hf_openwire_message_groupid
;
178 static int hf_openwire_message_groupsequence
;
179 static int hf_openwire_message_correlationid
;
180 static int hf_openwire_message_persistent
;
181 static int hf_openwire_message_expiration
;
182 static int hf_openwire_message_priority
;
183 static int hf_openwire_message_replyto
;
184 static int hf_openwire_message_timestamp
;
185 static int hf_openwire_message_type
;
186 static int hf_openwire_message_body
;
187 static int hf_openwire_message_properties
;
188 static int hf_openwire_message_datastructure
;
189 static int hf_openwire_message_targetconsumerid
;
190 static int hf_openwire_message_compressed
;
191 static int hf_openwire_message_redeliverycount
;
192 static int hf_openwire_message_brokerpath
;
193 static int hf_openwire_message_arrival
;
194 static int hf_openwire_message_userid
;
195 static int hf_openwire_message_receivedbydfbridge
;
196 static int hf_openwire_message_droppable
;
197 static int hf_openwire_message_cluster
;
198 static int hf_openwire_message_brokerintime
;
199 static int hf_openwire_message_brokerouttime
;
201 static int hf_openwire_producerid_connectionid
;
202 static int hf_openwire_producerid_value
;
203 static int hf_openwire_producerid_sessionid
;
205 static int hf_openwire_consumerid_connectionid
;
206 static int hf_openwire_consumerid_value
;
207 static int hf_openwire_consumerid_sessionid
;
209 static int hf_openwire_destination_name
;
211 static int hf_openwire_messageid_producerid
;
212 static int hf_openwire_messageid_producersequenceid
;
213 static int hf_openwire_messageid_brokersequenceid
;
215 static int hf_openwire_connectionid_value
;
217 static int hf_openwire_sessionid_connectionid
;
218 static int hf_openwire_sessionid_value
;
220 static int hf_openwire_brokerid_value
;
222 static int hf_openwire_localtransactionid_value
;
223 static int hf_openwire_localtransactionid_connectionid
;
225 static int hf_openwire_xatransactionid_formatid
;
226 static int hf_openwire_xatransactionid_globaltransactionid
;
227 static int hf_openwire_xatransactionid_branchqualifier
;
229 static int hf_openwire_map_length
;
230 static int hf_openwire_map_key
;
231 static int hf_openwire_map_entry
;
233 static int hf_openwire_throwable_class
;
234 static int hf_openwire_throwable_message
;
235 static int hf_openwire_throwable_element
;
236 static int hf_openwire_throwable_classname
;
237 static int hf_openwire_throwable_methodname
;
238 static int hf_openwire_throwable_filename
;
239 static int hf_openwire_throwable_linenumber
;
241 static int hf_openwire_type_integer
;
242 static int hf_openwire_type_short
;
243 static int hf_openwire_type_string
;
244 static int hf_openwire_type_bytes
;
245 static int hf_openwire_type_boolean
;
246 static int hf_openwire_type_byte
;
247 static int hf_openwire_type_char
;
248 static int hf_openwire_type_notnull
;
249 static int hf_openwire_type_long
;
250 static int hf_openwire_type_float
;
251 static int hf_openwire_type_double
;
252 static int hf_openwire_type_object
;
253 static int hf_openwire_type
;
255 static int hf_openwire_cached_inlined
;
256 static int hf_openwire_cached_id
;
257 static int hf_openwire_cached_enabled
;
259 static int ett_openwire
;
260 static int ett_openwire_type
;
262 static expert_field ei_openwire_tight_encoding_not_supported
;
263 static expert_field ei_openwire_encoding_not_supported
;
264 static expert_field ei_openwire_type_not_supported
;
265 static expert_field ei_openwire_command_not_supported
;
266 static expert_field ei_openwire_body_type_not_supported
;
268 static dissector_handle_t openwire_tcp_handle
;
270 static bool openwire_desegment
= true;
271 static bool openwire_verbose_type
;
273 #define OPENWIRE_PORT_TCP 61616
275 #define OPENWIRE_MAGIC_PART_1 0x41637469 /* "Acti" */
276 #define OPENWIRE_MAGIC_PART_2 0x76654D51 /* "veMQ" */
278 #define OPENWIRE_WIREFORMAT_INFO 1
279 #define OPENWIRE_BROKER_INFO 2
280 #define OPENWIRE_CONNECTION_INFO 3
281 #define OPENWIRE_SESSION_INFO 4
282 #define OPENWIRE_CONSUMER_INFO 5
283 #define OPENWIRE_PRODUCER_INFO 6
284 #define OPENWIRE_TRANSACTION_INFO 7
285 #define OPENWIRE_DESTINATION_INFO 8
286 #define OPENWIRE_REMOVE_SUBSCRIPTION_INFO 9
287 #define OPENWIRE_KEEP_ALIVE_INFO 10
288 #define OPENWIRE_SHUTDOWN_INFO 11
289 #define OPENWIRE_REMOVE_INFO 12
290 #define OPENWIRE_CONTROL_COMMAND 14
291 #define OPENWIRE_FLUSH_COMMAND 15
292 #define OPENWIRE_CONNECTION_ERROR 16
293 #define OPENWIRE_CONSUMER_CONTROL 17
294 #define OPENWIRE_CONNECTION_CONTROL 18
295 #define OPENWIRE_PRODUCER_ACK 19
296 #define OPENWIRE_MESSAGE_PULL 20
297 #define OPENWIRE_MESSAGE_DISPATCH 21
298 #define OPENWIRE_MESSAGE_ACK 22
299 #define OPENWIRE_ACTIVEMQ_MESSAGE 23
300 #define OPENWIRE_ACTIVEMQ_BYTES_MESSAGE 24
301 #define OPENWIRE_ACTIVEMQ_MAP_MESSAGE 25
302 #define OPENWIRE_ACTIVEMQ_OBJECT_MESSAGE 26
303 #define OPENWIRE_ACTIVEMQ_STREAM_MESSAGE 27
304 #define OPENWIRE_ACTIVEMQ_TEXT_MESSAGE 28
305 #define OPENWIRE_ACTIVEMQ_BLOB_MESSAGE 29
306 #define OPENWIRE_RESPONSE 30
307 #define OPENWIRE_EXCEPTION_RESPONSE 31
308 #define OPENWIRE_DATA_RESPONSE 32
309 #define OPENWIRE_DATA_ARRAY_RESPONSE 33
310 #define OPENWIRE_INTEGER_RESPONSE 34
311 #define OPENWIRE_DISCOVERY_EVENT 40
312 #define OPENWIRE_JOURNAL_ACK 50
313 #define OPENWIRE_JOURNAL_REMOVE 52
314 #define OPENWIRE_JOURNAL_TRACE 53
315 #define OPENWIRE_JOURNAL_TRANSACTION 54
316 #define OPENWIRE_DURABLE_SUBSCRIPTION_INFO 55
317 #define OPENWIRE_PARTIAL_COMMAND 60
318 #define OPENWIRE_PARTIAL_LAST_COMMAND 61
319 #define OPENWIRE_REPLAY 65
320 #define OPENWIRE_BYTE_TYPE 70
321 #define OPENWIRE_CHAR_TYPE 71
322 #define OPENWIRE_SHORT_TYPE 72
323 #define OPENWIRE_INTEGER_TYPE 73
324 #define OPENWIRE_LONG_TYPE 74
325 #define OPENWIRE_DOUBLE_TYPE 75
326 #define OPENWIRE_FLOAT_TYPE 76
327 #define OPENWIRE_STRING_TYPE 77
328 #define OPENWIRE_BOOLEAN_TYPE 78
329 #define OPENWIRE_BYTE_ARRAY_TYPE 79
330 #define OPENWIRE_MESSAGE_DISPATCH_NOTIFICATION 90
331 #define OPENWIRE_NETWORK_BRIDGE_FILTER 91
332 #define OPENWIRE_ACTIVEMQ_QUEUE 100
333 #define OPENWIRE_ACTIVEMQ_TOPIC 101
334 #define OPENWIRE_ACTIVEMQ_TEMP_QUEUE 102
335 #define OPENWIRE_ACTIVEMQ_TEMP_TOPIC 103
336 #define OPENWIRE_MESSAGE_ID 110
337 #define OPENWIRE_ACTIVEMQ_LOCAL_TRANSACTION_ID 111
338 #define OPENWIRE_ACTIVEMQ_XA_TRANSACTION_ID 112
339 #define OPENWIRE_CONNECTION_ID 120
340 #define OPENWIRE_SESSION_ID 121
341 #define OPENWIRE_CONSUMER_ID 122
342 #define OPENWIRE_PRODUCER_ID 123
343 #define OPENWIRE_BROKER_ID 124
345 static const value_string openwire_opcode_vals
[] = {
346 { OPENWIRE_WIREFORMAT_INFO
, "WireFormatInfo" },
347 { OPENWIRE_BROKER_INFO
, "BrokerInfo" },
348 { OPENWIRE_CONNECTION_INFO
, "ConnectionInfo" },
349 { OPENWIRE_SESSION_INFO
, "SessionInfo" },
350 { OPENWIRE_CONSUMER_INFO
, "ConsumerInfo" },
351 { OPENWIRE_PRODUCER_INFO
, "ProducerInfo" },
352 { OPENWIRE_TRANSACTION_INFO
, "TransactionInfo" },
353 { OPENWIRE_DESTINATION_INFO
, "DestinationInfo" },
354 { OPENWIRE_REMOVE_SUBSCRIPTION_INFO
, "RemoveSubscriptionInfo" },
355 { OPENWIRE_KEEP_ALIVE_INFO
, "KeepAliveInfo" },
356 { OPENWIRE_SHUTDOWN_INFO
, "ShutdownInfo" },
357 { OPENWIRE_REMOVE_INFO
, "RemoveInfo" },
358 { OPENWIRE_CONTROL_COMMAND
, "ControlCommand" },
359 { OPENWIRE_FLUSH_COMMAND
, "FlushCommand" },
360 { OPENWIRE_CONNECTION_ERROR
, "ConnectionError" },
361 { OPENWIRE_CONSUMER_CONTROL
, "ConsumerControl" },
362 { OPENWIRE_CONNECTION_CONTROL
, "ConnectionControl" },
363 { OPENWIRE_PRODUCER_ACK
, "ProducerAck" },
364 { OPENWIRE_MESSAGE_PULL
, "MessagePull" },
365 { OPENWIRE_MESSAGE_DISPATCH
, "MessageDispatch" },
366 { OPENWIRE_MESSAGE_ACK
, "MessageAck" },
367 { OPENWIRE_ACTIVEMQ_MESSAGE
, "ActiveMQMessage" },
368 { OPENWIRE_ACTIVEMQ_BYTES_MESSAGE
, "ActiveMQBytesMessage" },
369 { OPENWIRE_ACTIVEMQ_MAP_MESSAGE
, "ActiveMQMapMessage" },
370 { OPENWIRE_ACTIVEMQ_OBJECT_MESSAGE
, "ActiveMQObjectMessage" },
371 { OPENWIRE_ACTIVEMQ_STREAM_MESSAGE
, "ActiveMQStreamMessage" },
372 { OPENWIRE_ACTIVEMQ_TEXT_MESSAGE
, "ActiveMQTextMessage" },
373 { OPENWIRE_ACTIVEMQ_BLOB_MESSAGE
, "ActiveMQBlobMessage" },
374 { OPENWIRE_RESPONSE
, "Response" },
375 { OPENWIRE_EXCEPTION_RESPONSE
, "ExceptionResponse" },
376 { OPENWIRE_DATA_RESPONSE
, "DataResponse" },
377 { OPENWIRE_DATA_ARRAY_RESPONSE
, "DataArrayResponse" },
378 { OPENWIRE_INTEGER_RESPONSE
, "IntegerResponse" },
379 { OPENWIRE_DISCOVERY_EVENT
, "DiscoveryEvent" },
380 { OPENWIRE_JOURNAL_ACK
, "JournalTopicAck" },
381 { OPENWIRE_JOURNAL_REMOVE
, "JournalQueueAck" },
382 { OPENWIRE_JOURNAL_TRACE
, "JournalTrace" },
383 { OPENWIRE_JOURNAL_TRANSACTION
, "JournalTransaction" },
384 { OPENWIRE_DURABLE_SUBSCRIPTION_INFO
, "SubscriptionInfo" },
385 { OPENWIRE_PARTIAL_COMMAND
, "PartialCommand" },
386 { OPENWIRE_PARTIAL_LAST_COMMAND
, "LastPartialCommand" },
387 { OPENWIRE_REPLAY
, "ReplayCommand" },
388 { OPENWIRE_BYTE_TYPE
, "Byte" },
389 { OPENWIRE_CHAR_TYPE
, "Char" },
390 { OPENWIRE_SHORT_TYPE
, "Short" },
391 { OPENWIRE_INTEGER_TYPE
, "Integer" },
392 { OPENWIRE_LONG_TYPE
, "Long" },
393 { OPENWIRE_DOUBLE_TYPE
, "Double" },
394 { OPENWIRE_FLOAT_TYPE
, "Float" },
395 { OPENWIRE_STRING_TYPE
, "String" },
396 { OPENWIRE_BOOLEAN_TYPE
, "Boolean" },
397 { OPENWIRE_BYTE_ARRAY_TYPE
, "ByteArray" },
398 { OPENWIRE_MESSAGE_DISPATCH_NOTIFICATION
, "MessageDispatchNotification" },
399 { OPENWIRE_NETWORK_BRIDGE_FILTER
, "NetworkBridgeFilter" },
400 { OPENWIRE_ACTIVEMQ_QUEUE
, "ActiveMQQueue" },
401 { OPENWIRE_ACTIVEMQ_TOPIC
, "ActiveMQTopic" },
402 { OPENWIRE_ACTIVEMQ_TEMP_QUEUE
, "ActiveMQTempQueue" },
403 { OPENWIRE_ACTIVEMQ_TEMP_TOPIC
, "ActiveMQTempTopic" },
404 { OPENWIRE_MESSAGE_ID
, "MessageId" },
405 { OPENWIRE_ACTIVEMQ_LOCAL_TRANSACTION_ID
, "LocalTransactionId" },
406 { OPENWIRE_ACTIVEMQ_XA_TRANSACTION_ID
, "XATransactionId" },
407 { OPENWIRE_CONNECTION_ID
, "ConnectionId" },
408 { OPENWIRE_SESSION_ID
, "SessionId" },
409 { OPENWIRE_CONSUMER_ID
, "ConsumerId" },
410 { OPENWIRE_PRODUCER_ID
, "ProducerId" },
411 { OPENWIRE_BROKER_ID
, "BrokerId" },
415 static value_string_ext openwire_opcode_vals_ext
= VALUE_STRING_EXT_INIT(openwire_opcode_vals
);
417 #define OPENWIRE_COMMAND_INNER -5
418 #define OPENWIRE_TYPE_OBJECT_ARRAY -4
419 #define OPENWIRE_TYPE_CACHED -3
420 #define OPENWIRE_TYPE_NESTED -2
421 #define OPENWIRE_TYPE_THROWABLE -1
422 #define OPENWIRE_TYPE_NULL 0
423 #define OPENWIRE_TYPE_BOOLEAN 1
424 #define OPENWIRE_TYPE_BYTE 2
425 #define OPENWIRE_TYPE_CHAR 3
426 #define OPENWIRE_TYPE_SHORT 4
427 #define OPENWIRE_TYPE_INTEGER 5
428 #define OPENWIRE_TYPE_LONG 6
429 #define OPENWIRE_TYPE_DOUBLE 7
430 #define OPENWIRE_TYPE_FLOAT 8
431 #define OPENWIRE_TYPE_STRING 9
432 #define OPENWIRE_TYPE_BYTE_ARRAY 10
433 #define OPENWIRE_TYPE_MAP 11
434 #define OPENWIRE_TYPE_LIST 12
435 #define OPENWIRE_TYPE_BIG_STRING 13
437 static const value_string openwire_type_vals
[] = {
438 { OPENWIRE_TYPE_NULL
, "Null" },
439 { OPENWIRE_TYPE_BOOLEAN
, "Boolean" },
440 { OPENWIRE_TYPE_BYTE
, "Byte" },
441 { OPENWIRE_TYPE_CHAR
, "Char" },
442 { OPENWIRE_TYPE_SHORT
, "Short" },
443 { OPENWIRE_TYPE_INTEGER
, "Integer" },
444 { OPENWIRE_TYPE_LONG
, "Long" },
445 { OPENWIRE_TYPE_DOUBLE
, "Double" },
446 { OPENWIRE_TYPE_FLOAT
, "Float" },
447 { OPENWIRE_TYPE_STRING
, "String" },
448 { OPENWIRE_TYPE_BYTE_ARRAY
, "ByteArray" },
449 { OPENWIRE_TYPE_MAP
, "Map" },
450 { OPENWIRE_TYPE_LIST
, "List" },
451 { OPENWIRE_TYPE_BIG_STRING
, "BigString" },
452 { OPENWIRE_ACTIVEMQ_MESSAGE
, "ActiveMQMessage" },
453 { OPENWIRE_ACTIVEMQ_BYTES_MESSAGE
, "ActiveMQBytesMessage" },
454 { OPENWIRE_ACTIVEMQ_MAP_MESSAGE
, "ActiveMQMapMessage" },
455 { OPENWIRE_ACTIVEMQ_OBJECT_MESSAGE
, "ActiveMQObjectMessage" },
456 { OPENWIRE_ACTIVEMQ_STREAM_MESSAGE
, "ActiveMQStreamMessage" },
457 { OPENWIRE_ACTIVEMQ_TEXT_MESSAGE
, "ActiveMQTextMessage" },
458 { OPENWIRE_ACTIVEMQ_BLOB_MESSAGE
, "ActiveMQBlobMessage" },
459 { OPENWIRE_ACTIVEMQ_QUEUE
, "ActiveMQQueue" },
460 { OPENWIRE_ACTIVEMQ_TOPIC
, "ActiveMQTopic" },
461 { OPENWIRE_ACTIVEMQ_TEMP_QUEUE
, "ActiveMQTempQueue" },
462 { OPENWIRE_ACTIVEMQ_TEMP_TOPIC
, "ActiveMQTempTopic" },
463 { OPENWIRE_MESSAGE_ID
, "MessageId" },
464 { OPENWIRE_ACTIVEMQ_LOCAL_TRANSACTION_ID
, "LocalTransactionId" },
465 { OPENWIRE_ACTIVEMQ_XA_TRANSACTION_ID
, "XATransactionId" },
466 { OPENWIRE_CONNECTION_ID
, "ConnectionId" },
467 { OPENWIRE_SESSION_ID
, "SessionId" },
468 { OPENWIRE_CONSUMER_ID
, "ConsumerId" },
469 { OPENWIRE_PRODUCER_ID
, "ProducerId" },
470 { OPENWIRE_BROKER_ID
, "BrokerId" },
471 { OPENWIRE_TYPE_OBJECT_ARRAY
, "ObjectArray" },
472 { OPENWIRE_TYPE_THROWABLE
, "Throwable" },
476 static value_string_ext openwire_type_vals_ext
= VALUE_STRING_EXT_INIT(openwire_type_vals
);
478 #define OPENWIRE_TRANSACTIONTYPE_BEGIN 0
479 #define OPENWIRE_TRANSACTIONTYPE_PREPARE 1
480 #define OPENWIRE_TRANSACTIONTYPE_COMMIT_ONE_PHASE 2
481 #define OPENWIRE_TRANSACTIONTYPE_COMMIT_TWO_PHASE 3
482 #define OPENWIRE_TRANSACTIONTYPE_ROLLBACK 4
483 #define OPENWIRE_TRANSACTIONTYPE_RECOVER 5
484 #define OPENWIRE_TRANSACTIONTYPE_FORGET 6
485 #define OPENWIRE_TRANSACTIONTYPE_END 7
487 static const value_string openwire_transaction_type_vals
[] = {
488 { OPENWIRE_TRANSACTIONTYPE_BEGIN
, "Begin" },
489 { OPENWIRE_TRANSACTIONTYPE_PREPARE
, "Prepare" },
490 { OPENWIRE_TRANSACTIONTYPE_COMMIT_ONE_PHASE
, "CommitOnePhase" },
491 { OPENWIRE_TRANSACTIONTYPE_COMMIT_TWO_PHASE
, "CommitTwoPhase" },
492 { OPENWIRE_TRANSACTIONTYPE_ROLLBACK
, "Rollback" },
493 { OPENWIRE_TRANSACTIONTYPE_RECOVER
, "Recover" },
494 { OPENWIRE_TRANSACTIONTYPE_FORGET
, "Forget" },
495 { OPENWIRE_TRANSACTIONTYPE_END
, "End" },
499 static value_string_ext openwire_transaction_type_vals_ext
= VALUE_STRING_EXT_INIT(openwire_transaction_type_vals
);
501 #define OPENWIRE_MESSAGE_ACK_TYPE_DELIVERED 0
502 #define OPENWIRE_MESSAGE_ACK_TYPE_POISON 1
503 #define OPENWIRE_MESSAGE_ACK_TYPE_STANDARD 2
504 #define OPENWIRE_MESSAGE_ACK_TYPE_REDELIVERED 3
505 #define OPENWIRE_MESSAGE_ACK_TYPE_INDIVIDUAL 4
506 #define OPENWIRE_MESSAGE_ACK_TYPE_UNMATCHED 5
508 static const value_string openwire_message_ack_type_vals
[] = {
509 { OPENWIRE_MESSAGE_ACK_TYPE_DELIVERED
, "Delivered" },
510 { OPENWIRE_MESSAGE_ACK_TYPE_POISON
, "Poison" },
511 { OPENWIRE_MESSAGE_ACK_TYPE_STANDARD
, "Standard" },
512 { OPENWIRE_MESSAGE_ACK_TYPE_REDELIVERED
, "Redelivered" },
513 { OPENWIRE_MESSAGE_ACK_TYPE_INDIVIDUAL
, "Individual" },
514 { OPENWIRE_MESSAGE_ACK_TYPE_UNMATCHED
, "Unmatched" },
518 #define OPENWIRE_OPERATION_TYPE_ADD 0
519 #define OPENWIRE_OPERATION_TYPE_REMOVE 1
521 static const value_string openwire_operation_type_vals
[] = {
522 { OPENWIRE_OPERATION_TYPE_ADD
, "Add" },
523 { OPENWIRE_OPERATION_TYPE_REMOVE
, "Remove" },
527 typedef struct openwire_conv_data
{
530 } openwire_conv_data
;
533 validate_boolean(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree _U_
, int offset
, proto_item
*boolean_item
)
535 /* Sanity check of boolean : must be 0x00 or 0x01 */
537 booleanByte
= tvb_get_uint8(tvb
, offset
);
538 if (booleanByte
!= false && booleanByte
!= true)
540 expert_add_info(pinfo
, boolean_item
, &ei_openwire_encoding_not_supported
);
545 particularize(int specificField
, int genericField
)
547 return (specificField
== hf_openwire_none
? genericField
: specificField
);
551 detect_protocol_options(tvbuff_t
*tvb
, packet_info
*pinfo
, int offset
, int iCommand
)
553 /* This function is level-2 heuristic to detect the protocol options, after the level-1 heuristic to detect the protocol.
554 The WireFormatInfo structure reliably declares whether tight encoding and/or caching are used.
555 However, only the response must be used, which is the result of the "negotiation" handshake with the server.
556 However, if the capture is started after the connection initial handshake, it must be deduced in a heuristic way.
557 For the sake of generality, we do not consider the handshake, but only the heuristic way.
559 if (tvb_captured_length_remaining(tvb
, offset
) >= 12)
561 /* Only check commands which start with a "OPENWIRE_TYPE_CACHED" object */
562 if (iCommand
== OPENWIRE_SESSION_INFO
563 || iCommand
== OPENWIRE_DESTINATION_INFO
564 || iCommand
== OPENWIRE_CONNECTION_INFO
565 || iCommand
== OPENWIRE_CONSUMER_INFO
566 || iCommand
== OPENWIRE_PRODUCER_INFO
567 || iCommand
== OPENWIRE_BROKER_INFO
568 || iCommand
== OPENWIRE_TRANSACTION_INFO
569 || iCommand
== OPENWIRE_REMOVE_SUBSCRIPTION_INFO
570 || iCommand
== OPENWIRE_MESSAGE_DISPATCH
571 || iCommand
== OPENWIRE_MESSAGE_ACK
572 || iCommand
== OPENWIRE_MESSAGE_PULL
)
574 conversation_t
*conv
= NULL
;
575 openwire_conv_data
*cd
= NULL
;
576 conv
= find_or_create_conversation(pinfo
);
577 cd
= (openwire_conv_data
*)conversation_get_proto_data(conv
, proto_openwire
);
580 uint8_t present
, type
;
583 present
= tvb_get_uint8(tvb
, offset
+ 10);
584 type
= tvb_get_uint8(tvb
, offset
+ 11);
585 command_id
= tvb_get_ntohl(tvb
, offset
+ 5);
587 cd
= wmem_new(wmem_file_scope(), openwire_conv_data
);
590 if (command_id
> (1 << 24))
592 /* If "tight" encoding is enabled, the command_id first byte is non-zero.
593 This can be misdetected with "loose" encoding if the capture is started after 16 millions commands on the connection,
594 which we will assume that it happens very rarely. */
599 if (present
== true && type
== OPENWIRE_TYPE_NULL
)
601 /* If a cached object is not-null, it should be the "NULL" object.
602 This can be misdetected with "loose" encoding if the capture is started after 256 cached objects on the connection,
603 which we will assume that it happens rarely. */
607 conversation_add_proto_data(conv
, proto_openwire
, cd
);
611 else if ((tvb_get_uint8(tvb
, 4) == OPENWIRE_KEEP_ALIVE_INFO
)
612 && (tvb_captured_length(tvb
) == 11))
614 /* If the capture is started after a long-lived connection is started,
615 a keep-alive command of 11 bytes detects tight encoding (not caching stays unknown).
617 conversation_t
*conv
= NULL
;
618 openwire_conv_data
*cd
= NULL
;
619 conv
= find_or_create_conversation(pinfo
);
620 cd
= (openwire_conv_data
*)conversation_get_proto_data(conv
, proto_openwire
);
623 cd
= wmem_new(wmem_file_scope(), openwire_conv_data
);
625 cd
->caching
= false; /* Dummy value */
626 conversation_add_proto_data(conv
, proto_openwire
, cd
);
632 retrieve_caching(packet_info
*pinfo
)
634 conversation_t
*conv
;
635 openwire_conv_data
*cd
;
637 conv
= find_or_create_conversation(pinfo
);
638 cd
= (openwire_conv_data
*)conversation_get_proto_data(conv
, proto_openwire
);
639 if (cd
) return cd
->caching
;
640 /* Default : non-caching is recommended */
645 retrieve_tight(packet_info
*pinfo
)
647 conversation_t
*conv
;
648 openwire_conv_data
*cd
;
650 conv
= find_or_create_conversation(pinfo
);
651 cd
= (openwire_conv_data
*)conversation_get_proto_data(conv
, proto_openwire
);
652 if (cd
&& cd
->tight
) return true;
657 dissect_openwire_command(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, int offset
, int parentType
);
660 // NOLINTNEXTLINE(misc-no-recursion)
661 dissect_openwire_type(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, int offset
, int field
, int type
, int parentType
, bool nullable
)
663 int startOffset
= offset
;
664 proto_item
*boolean_item
= NULL
;
665 const char *cache_str
= "";
667 if (type
== OPENWIRE_TYPE_CACHED
&& retrieve_caching(pinfo
) == true && tvb_reported_length_remaining(tvb
, offset
) >= 3)
671 proto_item
* cached_item
= NULL
;
672 inlined
= tvb_get_uint8(tvb
, offset
+ 0) == true ? true : false;
673 cachedID
= tvb_get_ntohs(tvb
, offset
+ 1);
674 cache_str
= wmem_strdup_printf(pinfo
->pool
, " (CachedID: %d)", cachedID
);
675 if (openwire_verbose_type
)
677 proto_tree_add_item(tree
, hf_openwire_cached_inlined
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
679 cached_item
= proto_tree_add_item(tree
, hf_openwire_cached_id
, tvb
, offset
+ 1, 2, ENC_BIG_ENDIAN
);
680 if (!openwire_verbose_type
)
682 /* Hide it but allow it in search filters */
683 proto_item_set_hidden(cached_item
);
685 if (inlined
== false)
688 ti
= proto_tree_add_item(tree
, particularize(field
, hf_openwire_type_object
), tvb
, startOffset
, 3, ENC_NA
);
689 proto_item_append_text(ti
, "%s", cache_str
);
697 if (nullable
== true && (type
== OPENWIRE_TYPE_NESTED
|| type
== OPENWIRE_TYPE_CACHED
|| type
== OPENWIRE_COMMAND_INNER
) && tvb_reported_length_remaining(tvb
, offset
) >= 1)
699 nullable
= tvb_get_uint8(tvb
, offset
+ 0) == false ? true : false;
700 if (openwire_verbose_type
)
702 boolean_item
= proto_tree_add_item(tree
, hf_openwire_type_notnull
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
704 validate_boolean(tvb
, pinfo
, tree
, offset
, boolean_item
);
705 if (nullable
== true)
707 proto_tree_add_item(tree
, particularize(field
, hf_openwire_none
), tvb
, offset
, 1, ENC_NA
);
708 return offset
- startOffset
+ 1;
712 if (type
== OPENWIRE_COMMAND_INNER
&& tvb_reported_length_remaining(tvb
, offset
) >= 1)
714 proto_item
* inner_item
= NULL
;
715 proto_tree
* object_tree
= NULL
;
716 uint8_t iCommand
= parentType
;
717 iCommand
= tvb_get_uint8(tvb
, offset
+ 0);
718 inner_item
= proto_tree_add_item(tree
, particularize(field
, hf_openwire_none
), tvb
, startOffset
, -1, ENC_NA
);
719 proto_item_append_text(inner_item
, ": %s", val_to_str_ext(iCommand
, &openwire_opcode_vals_ext
, "Unknown (0x%02x)"));
720 object_tree
= proto_item_add_subtree(inner_item
, ett_openwire_type
);
721 increment_dissection_depth(pinfo
);
722 int command_offset
= 1 + dissect_openwire_command(tvb
, pinfo
, object_tree
, offset
, parentType
);
723 decrement_dissection_depth(pinfo
);
724 return command_offset
;
727 if ((type
== OPENWIRE_TYPE_NESTED
|| type
== OPENWIRE_TYPE_CACHED
) && tvb_reported_length_remaining(tvb
, offset
) >= 1)
729 type
= tvb_get_uint8(tvb
, offset
+ 0);
730 if (openwire_verbose_type
)
732 proto_tree_add_item(tree
, hf_openwire_type
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
736 if (nullable
== true && tvb_reported_length_remaining(tvb
, offset
) >= 1)
738 nullable
= tvb_get_uint8(tvb
, offset
+ 0) == false ? true : false;
739 if (openwire_verbose_type
)
741 boolean_item
= proto_tree_add_item(tree
, hf_openwire_type_notnull
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
743 validate_boolean(tvb
, pinfo
, tree
, offset
, boolean_item
);
744 if (nullable
== true)
746 proto_tree_add_item(tree
, particularize(field
, hf_openwire_none
), tvb
, offset
, 1, ENC_NA
);
747 return offset
- startOffset
+ 1;
752 /* First check for primitives types */
753 if (type
== OPENWIRE_TYPE_NULL
)
757 else if (type
== OPENWIRE_TYPE_INTEGER
&& tvb_reported_length_remaining(tvb
, offset
) >= 4)
759 proto_tree_add_item(tree
, particularize(field
, hf_openwire_type_integer
), tvb
, offset
, 4, ENC_BIG_ENDIAN
);
762 else if (type
== OPENWIRE_TYPE_SHORT
&& tvb_reported_length_remaining(tvb
, offset
) >= 2)
764 proto_tree_add_item(tree
, particularize(field
, hf_openwire_type_short
), tvb
, offset
, 2, ENC_BIG_ENDIAN
);
767 else if (type
== OPENWIRE_TYPE_LONG
&& tvb_reported_length_remaining(tvb
, offset
) >= 8)
769 proto_tree_add_item(tree
, particularize(field
, hf_openwire_type_long
), tvb
, offset
, 8, ENC_BIG_ENDIAN
);
772 else if (type
== OPENWIRE_TYPE_BOOLEAN
&& tvb_reported_length_remaining(tvb
, offset
) >= 1)
774 boolean_item
= proto_tree_add_item(tree
, particularize(field
, hf_openwire_type_boolean
), tvb
, offset
, 1, ENC_BIG_ENDIAN
);
775 validate_boolean(tvb
, pinfo
, tree
, offset
, boolean_item
);
778 else if (type
== OPENWIRE_TYPE_BYTE
&& tvb_reported_length_remaining(tvb
, offset
) >= 1)
780 proto_tree_add_item(tree
, particularize(field
, hf_openwire_type_byte
), tvb
, offset
, 1, ENC_NA
);
783 else if (type
== OPENWIRE_TYPE_CHAR
&& tvb_reported_length_remaining(tvb
, offset
) >= 2)
785 proto_tree_add_item(tree
, particularize(field
, hf_openwire_type_char
), tvb
, offset
, 2, ENC_NA
);
788 else if (type
== OPENWIRE_TYPE_FLOAT
&& tvb_reported_length_remaining(tvb
, offset
) >= 4)
790 proto_tree_add_item(tree
, particularize(field
, hf_openwire_type_float
), tvb
, offset
, 4, ENC_BIG_ENDIAN
);
793 else if (type
== OPENWIRE_TYPE_DOUBLE
&& tvb_reported_length_remaining(tvb
, offset
) >= 8)
795 proto_tree_add_item(tree
, particularize(field
, hf_openwire_type_double
), tvb
, offset
, 8, ENC_BIG_ENDIAN
);
798 else if (type
== OPENWIRE_TYPE_STRING
&& tvb_reported_length_remaining(tvb
, offset
) >= 2)
800 int iStringLength
= 0;
801 iStringLength
= tvb_get_ntohs(tvb
, offset
);
802 if (openwire_verbose_type
)
804 proto_tree_add_item(tree
, hf_openwire_type_short
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
807 if (tvb_reported_length_remaining(tvb
, offset
) >= iStringLength
)
809 proto_tree_add_item(tree
, particularize(field
, hf_openwire_type_string
), tvb
, offset
, iStringLength
, ENC_NA
);
810 offset
+= iStringLength
;
813 else if (type
== OPENWIRE_TYPE_BIG_STRING
&& tvb_reported_length_remaining(tvb
, offset
) >= 4)
815 int iStringLength
= 0;
816 iStringLength
= tvb_get_ntohl(tvb
, offset
);
817 if (openwire_verbose_type
)
819 proto_tree_add_item(tree
, hf_openwire_type_integer
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
822 if (tvb_reported_length_remaining(tvb
, offset
) >= iStringLength
)
824 proto_tree_add_item(tree
, particularize(field
, hf_openwire_type_string
), tvb
, offset
, iStringLength
, ENC_NA
);
825 offset
+= iStringLength
;
828 else if (type
== OPENWIRE_TYPE_BYTE_ARRAY
&& tvb_reported_length_remaining(tvb
, offset
) >= 4)
830 int iArrayLength
= 0;
831 iArrayLength
= tvb_get_ntohl(tvb
, offset
);
832 if (openwire_verbose_type
)
834 proto_tree_add_item(tree
, hf_openwire_type_integer
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
837 if (tvb_reported_length_remaining(tvb
, offset
) >= iArrayLength
)
839 proto_item
* array_item
= NULL
;
840 proto_tree
* object_tree
= NULL
;
841 array_item
= proto_tree_add_item(tree
, particularize(field
, hf_openwire_type_bytes
), tvb
, offset
, iArrayLength
, ENC_NA
);
842 object_tree
= proto_item_add_subtree(array_item
, ett_openwire_type
);
843 if (field
== hf_openwire_message_body
)
845 tvbuff_t
* next_tvb
= NULL
;
846 if (parentType
== OPENWIRE_ACTIVEMQ_TEXT_MESSAGE
)
848 dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_none
, OPENWIRE_TYPE_BIG_STRING
, type
, false);
849 next_tvb
= tvb_new_subset_length(tvb
, offset
, iArrayLength
);
850 add_new_data_source(pinfo
, next_tvb
, "Body");
852 else if (parentType
== OPENWIRE_ACTIVEMQ_MAP_MESSAGE
)
854 dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_none
, OPENWIRE_TYPE_MAP
, type
, false);
856 else if (parentType
== OPENWIRE_ACTIVEMQ_STREAM_MESSAGE
)
858 int streamOffset
= offset
;
859 while (streamOffset
< offset
+ iArrayLength
)
861 streamOffset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, streamOffset
, hf_openwire_none
, OPENWIRE_TYPE_NESTED
, type
, false);
864 else if (parentType
== OPENWIRE_ACTIVEMQ_BYTES_MESSAGE
865 || parentType
== OPENWIRE_ACTIVEMQ_OBJECT_MESSAGE
866 || parentType
== OPENWIRE_ACTIVEMQ_BLOB_MESSAGE
)
868 next_tvb
= tvb_new_subset_length(tvb
, offset
, iArrayLength
);
869 add_new_data_source(pinfo
, next_tvb
, "Body");
870 expert_add_info(pinfo
, array_item
, &ei_openwire_body_type_not_supported
);
873 else if (field
== hf_openwire_message_properties
)
875 dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_none
, OPENWIRE_TYPE_MAP
, type
, false);
877 offset
+= iArrayLength
;
880 else if (tvb_reported_length_remaining(tvb
, offset
) >= 1)
882 /* Check for complex types */
883 proto_tree
*object_tree
;
885 ti
= proto_tree_add_item(tree
, particularize(field
, hf_openwire_type_object
), tvb
, startOffset
, -1, ENC_NA
);
886 proto_item_append_text(ti
, ": %s", val_to_str_ext(type
, &openwire_type_vals_ext
, "Unknown (0x%02x)"));
887 proto_item_append_text(ti
, "%s", cache_str
);
889 object_tree
= proto_item_add_subtree(ti
, ett_openwire_type
);
891 if (type
== OPENWIRE_TYPE_OBJECT_ARRAY
&& tvb_reported_length_remaining(tvb
, offset
) >= 2)
895 iArrayLength
= tvb_get_ntohs(tvb
, offset
);
896 if (openwire_verbose_type
)
898 proto_tree_add_item(object_tree
, hf_openwire_type_short
, tvb
, offset
+ 0, 2, ENC_BIG_ENDIAN
);
900 proto_item_append_text(ti
, " (Size : %d)", iArrayLength
);
902 for (iArrayItem
= 0; iArrayItem
< iArrayLength
; iArrayItem
++)
904 if (tvb_reported_length_remaining(tvb
, offset
) >= 0)
906 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_none
, OPENWIRE_TYPE_NESTED
, type
, true);
910 else if (type
== OPENWIRE_TYPE_MAP
&& tvb_reported_length_remaining(tvb
, offset
) >= 4)
914 iMapLength
= tvb_get_ntohl(tvb
, offset
);
915 if (openwire_verbose_type
)
917 proto_tree_add_item(object_tree
, hf_openwire_map_length
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
919 proto_item_append_text(ti
, " (Size : %d)", iMapLength
);
921 for (iMapItem
= 0; (iMapItem
< iMapLength
) && (tvb_reported_length_remaining(tvb
, offset
) > 0); iMapItem
++)
923 proto_item
* map_entry
;
924 proto_tree
* entry_tree
;
925 int entryStartOffset
= offset
;
927 map_entry
= proto_tree_add_item(object_tree
, hf_openwire_map_entry
, tvb
, offset
, 0, ENC_NA
);
928 entry_tree
= proto_item_add_subtree(map_entry
, ett_openwire_type
);
931 offset
+= dissect_openwire_type(tvb
, pinfo
, entry_tree
, offset
, hf_openwire_map_key
, OPENWIRE_TYPE_STRING
, type
, false);
933 offset
+= dissect_openwire_type(tvb
, pinfo
, entry_tree
, offset
, hf_openwire_none
, OPENWIRE_TYPE_NESTED
, type
, false);
934 proto_item_set_len(map_entry
, offset
- entryStartOffset
);
937 else if (type
== OPENWIRE_TYPE_THROWABLE
&& tvb_reported_length_remaining(tvb
, offset
) >= 2)
939 int iStackTraceDepth
, iStackTraceItem
;
940 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_throwable_class
, OPENWIRE_TYPE_STRING
, type
, true);
941 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_throwable_message
, OPENWIRE_TYPE_STRING
, type
, true);
942 iStackTraceDepth
= tvb_get_ntohs(tvb
, offset
);
943 if (openwire_verbose_type
)
945 proto_tree_add_item(tree
, hf_openwire_type_short
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
948 if (iStackTraceDepth
> 0)
950 for (iStackTraceItem
= 0; iStackTraceItem
< iStackTraceDepth
; iStackTraceItem
++)
953 proto_tree
*element_tree
;
954 int startElementOffset
= offset
;
955 element
= proto_tree_add_item(object_tree
, hf_openwire_throwable_element
, tvb
, startElementOffset
, -1, ENC_NA
);
956 element_tree
= proto_item_add_subtree(element
, ett_openwire_type
);
958 if (tvb_reported_length_remaining(tvb
, offset
) >= 0)
960 offset
+= dissect_openwire_type(tvb
, pinfo
, element_tree
, offset
, hf_openwire_throwable_classname
, OPENWIRE_TYPE_STRING
, type
, true);
961 offset
+= dissect_openwire_type(tvb
, pinfo
, element_tree
, offset
, hf_openwire_throwable_methodname
, OPENWIRE_TYPE_STRING
, type
, true);
962 offset
+= dissect_openwire_type(tvb
, pinfo
, element_tree
, offset
, hf_openwire_throwable_filename
, OPENWIRE_TYPE_STRING
, type
, true);
963 offset
+= dissect_openwire_type(tvb
, pinfo
, element_tree
, offset
, hf_openwire_throwable_linenumber
, OPENWIRE_TYPE_INTEGER
, type
, false);
964 proto_item_set_len(element
, offset
- startElementOffset
);
967 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_exceptionresponse_exception
, OPENWIRE_TYPE_THROWABLE
, type
, true);
970 else if (type
== OPENWIRE_TYPE_LIST
&& tvb_reported_length_remaining(tvb
, offset
) >= 4)
974 else if (type
== OPENWIRE_CONNECTION_ID
&& tvb_reported_length_remaining(tvb
, offset
) >= 1)
976 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_connectionid_value
, OPENWIRE_TYPE_STRING
, type
, true);
978 else if (type
== OPENWIRE_SESSION_ID
&& tvb_reported_length_remaining(tvb
, offset
) >= 2)
980 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_sessionid_connectionid
, OPENWIRE_TYPE_STRING
, type
, true);
981 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_sessionid_value
, OPENWIRE_TYPE_LONG
, type
, false);
983 else if (type
== OPENWIRE_CONSUMER_ID
&& tvb_reported_length_remaining(tvb
, offset
) >= 3)
985 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_consumerid_connectionid
, OPENWIRE_TYPE_STRING
, type
, true);
986 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_consumerid_value
, OPENWIRE_TYPE_LONG
, type
, false);
987 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_consumerid_sessionid
, OPENWIRE_TYPE_LONG
, type
, false);
989 else if (type
== OPENWIRE_PRODUCER_ID
&& tvb_reported_length_remaining(tvb
, offset
) >= 3)
991 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_producerid_connectionid
, OPENWIRE_TYPE_STRING
, type
, true);
992 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_producerid_value
, OPENWIRE_TYPE_LONG
, type
, false);
993 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_producerid_sessionid
, OPENWIRE_TYPE_LONG
, type
, false);
995 else if (type
== OPENWIRE_BROKER_ID
&& tvb_reported_length_remaining(tvb
, offset
) >= 1)
997 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_brokerid_value
, OPENWIRE_TYPE_STRING
, type
, true);
999 else if (type
== OPENWIRE_MESSAGE_ID
&& tvb_reported_length_remaining(tvb
, offset
) >= 3)
1001 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_messageid_producerid
, OPENWIRE_TYPE_CACHED
, type
, true);
1002 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_messageid_producersequenceid
, OPENWIRE_TYPE_LONG
, type
, false);
1003 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_messageid_brokersequenceid
, OPENWIRE_TYPE_LONG
, type
, false);
1005 else if (type
== OPENWIRE_ACTIVEMQ_LOCAL_TRANSACTION_ID
&& tvb_reported_length_remaining(tvb
, offset
) >= 2)
1007 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_localtransactionid_value
, OPENWIRE_TYPE_LONG
, type
, false);
1008 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_localtransactionid_connectionid
, OPENWIRE_TYPE_CACHED
, type
, true);
1010 else if (type
== OPENWIRE_ACTIVEMQ_XA_TRANSACTION_ID
&& tvb_reported_length_remaining(tvb
, offset
) >= 3)
1012 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_xatransactionid_formatid
, OPENWIRE_TYPE_INTEGER
, type
, false);
1013 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_xatransactionid_globaltransactionid
, OPENWIRE_TYPE_BYTE_ARRAY
, type
, true);
1014 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_xatransactionid_branchqualifier
, OPENWIRE_TYPE_BYTE_ARRAY
, type
, true);
1016 else if ((type
== OPENWIRE_ACTIVEMQ_QUEUE
1017 || type
== OPENWIRE_ACTIVEMQ_TOPIC
1018 || type
== OPENWIRE_ACTIVEMQ_TEMP_QUEUE
1019 || type
== OPENWIRE_ACTIVEMQ_TEMP_TOPIC
)
1020 && tvb_reported_length_remaining(tvb
, offset
) >= 1)
1022 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_destination_name
, OPENWIRE_TYPE_STRING
, type
, true);
1024 else if (type
== OPENWIRE_ACTIVEMQ_MESSAGE
1025 || type
== OPENWIRE_ACTIVEMQ_BYTES_MESSAGE
1026 || type
== OPENWIRE_ACTIVEMQ_MAP_MESSAGE
1027 || type
== OPENWIRE_ACTIVEMQ_OBJECT_MESSAGE
1028 || type
== OPENWIRE_ACTIVEMQ_STREAM_MESSAGE
1029 || type
== OPENWIRE_ACTIVEMQ_TEXT_MESSAGE
1030 || type
== OPENWIRE_ACTIVEMQ_BLOB_MESSAGE
)
1032 if (parentType
!= type
)
1034 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_command_id
, OPENWIRE_TYPE_INTEGER
, type
, false);
1035 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_command_response_required
, OPENWIRE_TYPE_BOOLEAN
, type
, false);
1037 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_message_producerid
, OPENWIRE_TYPE_CACHED
, type
, true);
1038 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_message_destination
, OPENWIRE_TYPE_CACHED
, type
, true);
1039 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_message_transactionid
, OPENWIRE_TYPE_CACHED
, type
, true);
1040 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_message_originaldestination
, OPENWIRE_TYPE_CACHED
, type
, true);
1041 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_message_messageid
, OPENWIRE_TYPE_NESTED
, type
, true);
1042 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_message_originaldestinationid
, OPENWIRE_TYPE_CACHED
, type
, true);
1043 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_message_groupid
, OPENWIRE_TYPE_STRING
, type
, true);
1044 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_message_groupsequence
, OPENWIRE_TYPE_INTEGER
, type
, false);
1045 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_message_correlationid
, OPENWIRE_TYPE_STRING
, type
, true);
1046 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_message_persistent
, OPENWIRE_TYPE_BOOLEAN
, type
, false);
1047 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_message_expiration
, OPENWIRE_TYPE_LONG
, type
, false);
1048 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_message_priority
, OPENWIRE_TYPE_BYTE
, type
, false);
1049 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_message_replyto
, OPENWIRE_TYPE_NESTED
, type
, true);
1050 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_message_timestamp
, OPENWIRE_TYPE_LONG
, type
, false);
1051 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_message_type
, OPENWIRE_TYPE_STRING
, type
, true);
1052 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_message_body
, OPENWIRE_TYPE_BYTE_ARRAY
, type
, true);
1053 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_message_properties
, OPENWIRE_TYPE_BYTE_ARRAY
, type
, true);
1054 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_message_datastructure
, OPENWIRE_COMMAND_INNER
, type
, true);
1055 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_message_targetconsumerid
, OPENWIRE_TYPE_CACHED
, type
, true);
1056 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_message_compressed
, OPENWIRE_TYPE_BOOLEAN
, type
, false);
1057 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_message_redeliverycount
, OPENWIRE_TYPE_INTEGER
, type
, false);
1058 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_message_brokerpath
, OPENWIRE_TYPE_OBJECT_ARRAY
, type
, true);
1059 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_message_arrival
, OPENWIRE_TYPE_LONG
, type
, false);
1060 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_message_userid
, OPENWIRE_TYPE_STRING
, type
, true);
1061 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_message_receivedbydfbridge
, OPENWIRE_TYPE_BOOLEAN
, type
, false);
1062 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_message_droppable
, OPENWIRE_TYPE_BOOLEAN
, type
, false);
1063 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_message_cluster
, OPENWIRE_TYPE_OBJECT_ARRAY
, type
, true);
1064 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_message_brokerintime
, OPENWIRE_TYPE_LONG
, type
, false);
1065 offset
+= dissect_openwire_type(tvb
, pinfo
, object_tree
, offset
, hf_openwire_message_brokerouttime
, OPENWIRE_TYPE_LONG
, type
, false);
1067 else if (tvb_reported_length_remaining(tvb
, offset
) > 0)
1069 expert_add_info_format(pinfo
, object_tree
, &ei_openwire_type_not_supported
, "OpenWire type not supported by Wireshark : %d", type
);
1070 offset
+= tvb_captured_length_remaining(tvb
, offset
);
1072 proto_item_set_len(ti
, offset
- startOffset
);
1075 return (offset
- startOffset
);
1079 // NOLINTNEXTLINE(misc-no-recursion)
1080 dissect_openwire_command(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, int offset
, int parentType
)
1082 int startOffset
= offset
;
1085 iCommand
= tvb_get_uint8(tvb
, offset
+ 0);
1087 proto_tree_add_item(tree
, hf_openwire_command
, tvb
, offset
+ 0, 1, ENC_BIG_ENDIAN
);
1090 if (iCommand
== OPENWIRE_WIREFORMAT_INFO
)
1092 if (tvb_reported_length_remaining(tvb
, offset
) >= 17)
1094 proto_tree_add_item(tree
, hf_openwire_wireformatinfo_magic
, tvb
, offset
+ 0, 8, ENC_ASCII
);
1095 proto_tree_add_item(tree
, hf_openwire_wireformatinfo_version
, tvb
, offset
+ 8, 4, ENC_BIG_ENDIAN
);
1096 proto_tree_add_item(tree
, hf_openwire_wireformatinfo_data
, tvb
, offset
+ 12, 1, ENC_BIG_ENDIAN
);
1097 proto_tree_add_item(tree
, hf_openwire_wireformatinfo_length
, tvb
, offset
+ 13, 4, ENC_BIG_ENDIAN
);
1099 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_none
, OPENWIRE_TYPE_MAP
, iCommand
, false);
1104 if (tvb_reported_length_remaining(tvb
, offset
) >= 5)
1106 proto_tree_add_item(tree
, hf_openwire_command_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1107 proto_tree_add_item(tree
, hf_openwire_command_response_required
, tvb
, offset
+ 4, 1, ENC_BIG_ENDIAN
);
1109 if (iCommand
== OPENWIRE_SHUTDOWN_INFO
|| iCommand
== OPENWIRE_KEEP_ALIVE_INFO
|| iCommand
== OPENWIRE_FLUSH_COMMAND
)
1111 /* No additional fields */
1113 else if (iCommand
== OPENWIRE_SESSION_INFO
)
1115 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_sessioninfo_sessionid
, OPENWIRE_TYPE_CACHED
, iCommand
, true);
1117 else if (iCommand
== OPENWIRE_DESTINATION_INFO
)
1119 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_destinationinfo_connectionid
, OPENWIRE_TYPE_CACHED
, iCommand
, true);
1120 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_destinationinfo_destination
, OPENWIRE_TYPE_CACHED
, iCommand
, true);
1121 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_destinationinfo_operationtype
, OPENWIRE_TYPE_BYTE
, iCommand
, false);
1122 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_destinationinfo_timeout
, OPENWIRE_TYPE_LONG
, iCommand
, false);
1123 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_destinationinfo_brokerpath
, OPENWIRE_TYPE_OBJECT_ARRAY
, iCommand
, true);
1125 else if (iCommand
== OPENWIRE_CONNECTION_INFO
)
1127 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_connectioninfo_connectionid
, OPENWIRE_TYPE_CACHED
, iCommand
, true);
1128 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_connectioninfo_clientid
, OPENWIRE_TYPE_STRING
, iCommand
, true);
1129 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_connectioninfo_password
, OPENWIRE_TYPE_STRING
, iCommand
, true);
1130 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_connectioninfo_username
, OPENWIRE_TYPE_STRING
, iCommand
, true);
1131 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_connectioninfo_brokerpath
, OPENWIRE_TYPE_OBJECT_ARRAY
, iCommand
, true);
1132 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_connectioninfo_brokermasterconnector
, OPENWIRE_TYPE_BOOLEAN
, iCommand
, false);
1133 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_connectioninfo_manageable
, OPENWIRE_TYPE_BOOLEAN
, iCommand
, false);
1134 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_connectioninfo_clientmaster
, OPENWIRE_TYPE_BOOLEAN
, iCommand
, false);
1135 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_connectioninfo_faulttolerant
, OPENWIRE_TYPE_BOOLEAN
, iCommand
, false);
1136 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_connectioninfo_failoverreconnect
, OPENWIRE_TYPE_BOOLEAN
, iCommand
, false);
1138 else if (iCommand
== OPENWIRE_CONNECTION_CONTROL
)
1140 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_connectioncontrol_close
, OPENWIRE_TYPE_BOOLEAN
, iCommand
, true);
1141 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_connectioncontrol_exit
, OPENWIRE_TYPE_BOOLEAN
, iCommand
, false);
1142 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_connectioncontrol_faulttolerant
, OPENWIRE_TYPE_BOOLEAN
, iCommand
, false);
1143 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_connectioncontrol_resume
, OPENWIRE_TYPE_BOOLEAN
, iCommand
, false);
1144 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_connectioncontrol_suspend
, OPENWIRE_TYPE_BOOLEAN
, iCommand
, false);
1145 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_connectioncontrol_connectedbrokers
, OPENWIRE_TYPE_STRING
, iCommand
, true);
1146 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_connectioncontrol_reconnectto
, OPENWIRE_TYPE_STRING
, iCommand
, true);
1147 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_connectioncontrol_rebalanceconnection
, OPENWIRE_TYPE_BOOLEAN
, iCommand
, false);
1149 else if (iCommand
== OPENWIRE_CONSUMER_INFO
)
1151 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_consumerinfo_consumerid
, OPENWIRE_TYPE_CACHED
, iCommand
, true);
1152 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_consumerinfo_browser
, OPENWIRE_TYPE_BOOLEAN
, iCommand
, false);
1153 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_consumerinfo_destination
, OPENWIRE_TYPE_CACHED
, iCommand
, true);
1154 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_consumerinfo_prefetchsize
, OPENWIRE_TYPE_INTEGER
, iCommand
, false);
1155 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_consumerinfo_maximumpendingmessagelimit
, OPENWIRE_TYPE_INTEGER
, iCommand
, false);
1156 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_consumerinfo_dispatchasync
, OPENWIRE_TYPE_BOOLEAN
, iCommand
, false);
1157 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_consumerinfo_selector
, OPENWIRE_TYPE_STRING
, iCommand
, true);
1158 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_consumerinfo_subscriptionname
, OPENWIRE_TYPE_STRING
, iCommand
, true);
1159 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_consumerinfo_nolocal
, OPENWIRE_TYPE_BOOLEAN
, iCommand
, false);
1160 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_consumerinfo_exclusive
, OPENWIRE_TYPE_BOOLEAN
, iCommand
, false);
1161 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_consumerinfo_retroactive
, OPENWIRE_TYPE_BOOLEAN
, iCommand
, false);
1162 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_consumerinfo_priority
, OPENWIRE_TYPE_BYTE
, iCommand
, true);
1163 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_consumerinfo_brokerpath
, OPENWIRE_TYPE_OBJECT_ARRAY
, iCommand
, true);
1164 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_consumerinfo_additionalpredicate
, OPENWIRE_TYPE_NESTED
, iCommand
, true);
1165 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_consumerinfo_networksubscription
, OPENWIRE_TYPE_BOOLEAN
, iCommand
, false);
1166 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_consumerinfo_optimizedacknowledge
, OPENWIRE_TYPE_BOOLEAN
, iCommand
, false);
1167 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_consumerinfo_norangeacks
, OPENWIRE_TYPE_BOOLEAN
, iCommand
, false);
1168 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_consumerinfo_networkconsumerpath
, OPENWIRE_TYPE_OBJECT_ARRAY
, iCommand
, true);
1170 else if (iCommand
== OPENWIRE_PRODUCER_INFO
)
1172 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_producerinfo_producerid
, OPENWIRE_TYPE_CACHED
, iCommand
, true);
1173 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_producerinfo_destination
, OPENWIRE_TYPE_CACHED
, iCommand
, true);
1174 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_producerinfo_brokerpath
, OPENWIRE_TYPE_OBJECT_ARRAY
, iCommand
, true);
1175 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_producerinfo_dispatchasync
, OPENWIRE_TYPE_BOOLEAN
, iCommand
, false);
1176 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_producerinfo_windowsize
, OPENWIRE_TYPE_INTEGER
, iCommand
, false);
1178 else if (iCommand
== OPENWIRE_CONSUMER_CONTROL
)
1180 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_consumercontrol_destination
, OPENWIRE_TYPE_NESTED
, iCommand
, true);
1181 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_consumercontrol_close
, OPENWIRE_TYPE_BOOLEAN
, iCommand
, false);
1182 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_consumercontrol_consumerid
, OPENWIRE_TYPE_NESTED
, iCommand
, true);
1183 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_consumercontrol_prefetch
, OPENWIRE_TYPE_INTEGER
, iCommand
, false);
1184 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_consumercontrol_flush
, OPENWIRE_TYPE_BOOLEAN
, iCommand
, false);
1185 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_consumercontrol_start
, OPENWIRE_TYPE_BOOLEAN
, iCommand
, false);
1186 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_consumercontrol_stop
, OPENWIRE_TYPE_BOOLEAN
, iCommand
, false);
1188 else if (iCommand
== OPENWIRE_BROKER_INFO
)
1190 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_brokerinfo_brokerid
, OPENWIRE_TYPE_CACHED
, iCommand
, true);
1191 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_brokerinfo_brokerurl
, OPENWIRE_TYPE_STRING
, iCommand
, true);
1192 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_brokerinfo_peerbrokerinfos
, OPENWIRE_TYPE_OBJECT_ARRAY
, iCommand
, true);
1193 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_brokerinfo_brokername
, OPENWIRE_TYPE_STRING
, iCommand
, true);
1194 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_brokerinfo_slavebroker
, OPENWIRE_TYPE_BOOLEAN
, iCommand
, false);
1195 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_brokerinfo_masterbroker
, OPENWIRE_TYPE_BOOLEAN
, iCommand
, false);
1196 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_brokerinfo_faulttolerantconfiguration
, OPENWIRE_TYPE_BOOLEAN
, iCommand
, false);
1197 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_brokerinfo_duplexconnection
, OPENWIRE_TYPE_BOOLEAN
, iCommand
, false);
1198 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_brokerinfo_networkconnection
, OPENWIRE_TYPE_BOOLEAN
, iCommand
, false);
1199 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_brokerinfo_connectionid
, OPENWIRE_TYPE_LONG
, iCommand
, false);
1200 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_brokerinfo_brokeruploadurl
, OPENWIRE_TYPE_STRING
, iCommand
, true);
1201 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_brokerinfo_networkproperties
, OPENWIRE_TYPE_STRING
, iCommand
, true);
1203 else if (iCommand
== OPENWIRE_TRANSACTION_INFO
)
1205 uint8_t iTransactionType
;
1206 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_transactioninfo_connectionid
, OPENWIRE_TYPE_CACHED
, iCommand
, true);
1207 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_transactioninfo_transactionid
, OPENWIRE_TYPE_CACHED
, iCommand
, true);
1208 if (tvb_reported_length_remaining(tvb
, offset
) >= 1)
1210 iTransactionType
= tvb_get_uint8(tvb
, offset
);
1211 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_transactioninfo_type
, OPENWIRE_TYPE_BYTE
, iCommand
, false);
1212 proto_item_append_text(tree
, " (%s)", val_to_str_ext(iTransactionType
, &openwire_transaction_type_vals_ext
, "Unknown (0x%02x)"));
1215 else if (iCommand
== OPENWIRE_PRODUCER_ACK
)
1217 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_producerack_producerid
, OPENWIRE_TYPE_NESTED
, iCommand
, true);
1218 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_producerack_size
, OPENWIRE_TYPE_INTEGER
, iCommand
, false);
1220 else if (iCommand
== OPENWIRE_REMOVE_INFO
)
1222 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_removeinfo_objectid
, OPENWIRE_TYPE_CACHED
, iCommand
, true);
1223 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_removeinfo_lastdeliveredsequenceid
, OPENWIRE_TYPE_LONG
, iCommand
, false);
1225 else if (iCommand
== OPENWIRE_REMOVE_SUBSCRIPTION_INFO
)
1227 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_removesubscriptioninfo_connectionid
, OPENWIRE_TYPE_CACHED
, iCommand
, true);
1228 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_removesubscriptioninfo_subscriptionname
, OPENWIRE_TYPE_STRING
, iCommand
, true);
1229 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_removesubscriptioninfo_clientid
, OPENWIRE_TYPE_STRING
, iCommand
, true);
1231 else if (iCommand
== OPENWIRE_MESSAGE_DISPATCH
)
1233 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_messagedispatch_consumerid
, OPENWIRE_TYPE_CACHED
, iCommand
, true);
1234 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_messagedispatch_destination
, OPENWIRE_TYPE_CACHED
, iCommand
, true);
1235 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_messagedispatch_message
, OPENWIRE_TYPE_NESTED
, iCommand
, true);
1236 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_messagedispatch_redeliverycounter
, OPENWIRE_TYPE_INTEGER
, iCommand
, false);
1238 else if (iCommand
== OPENWIRE_MESSAGE_ACK
)
1240 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_messageack_destination
, OPENWIRE_TYPE_CACHED
, iCommand
, true);
1241 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_messageack_transactionid
, OPENWIRE_TYPE_CACHED
, iCommand
, true);
1242 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_messageack_consumerid
, OPENWIRE_TYPE_CACHED
, iCommand
, true);
1243 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_messageack_acktype
, OPENWIRE_TYPE_BYTE
, iCommand
, false);
1244 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_messageack_firstmessageid
, OPENWIRE_TYPE_NESTED
, iCommand
, true);
1245 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_messageack_lastmessageid
, OPENWIRE_TYPE_NESTED
, iCommand
, true);
1246 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_messageack_messagecount
, OPENWIRE_TYPE_INTEGER
, iCommand
, false);
1248 else if (iCommand
== OPENWIRE_MESSAGE_PULL
)
1250 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_messagepull_consumerid
, OPENWIRE_TYPE_CACHED
, iCommand
, true);
1251 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_messagepull_destinationid
, OPENWIRE_TYPE_CACHED
, iCommand
, true);
1252 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_messagepull_timeout
, OPENWIRE_TYPE_LONG
, iCommand
, false);
1253 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_messagepull_correlationid
, OPENWIRE_TYPE_STRING
, iCommand
, true);
1254 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_messagepull_messageid
, OPENWIRE_TYPE_NESTED
, iCommand
, true);
1256 else if (iCommand
== OPENWIRE_RESPONSE
)
1258 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_response_correlationid
, OPENWIRE_TYPE_INTEGER
, iCommand
, false);
1260 else if (iCommand
== OPENWIRE_DATA_RESPONSE
)
1262 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_response_correlationid
, OPENWIRE_TYPE_INTEGER
, iCommand
, false);
1263 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_dataresponse_data
, OPENWIRE_COMMAND_INNER
, iCommand
, true);
1265 else if (iCommand
== OPENWIRE_CONNECTION_ERROR
)
1267 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_connectionerror_exception
, OPENWIRE_TYPE_THROWABLE
, iCommand
, true);
1268 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_connectionerror_connectionid
, OPENWIRE_TYPE_NESTED
, iCommand
, true);
1270 else if (iCommand
== OPENWIRE_EXCEPTION_RESPONSE
)
1272 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_response_correlationid
, OPENWIRE_TYPE_INTEGER
, iCommand
, false);
1273 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_exceptionresponse_exception
, OPENWIRE_TYPE_THROWABLE
, iCommand
, true);
1275 else if (iCommand
== OPENWIRE_CONTROL_COMMAND
)
1277 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_controlcommand_command
, OPENWIRE_TYPE_STRING
, iCommand
, true);
1279 else if (iCommand
== OPENWIRE_ACTIVEMQ_MESSAGE
1280 || iCommand
== OPENWIRE_ACTIVEMQ_BYTES_MESSAGE
1281 || iCommand
== OPENWIRE_ACTIVEMQ_MAP_MESSAGE
1282 || iCommand
== OPENWIRE_ACTIVEMQ_OBJECT_MESSAGE
1283 || iCommand
== OPENWIRE_ACTIVEMQ_STREAM_MESSAGE
1284 || iCommand
== OPENWIRE_ACTIVEMQ_TEXT_MESSAGE
1285 || iCommand
== OPENWIRE_ACTIVEMQ_BLOB_MESSAGE
)
1287 offset
+= dissect_openwire_type(tvb
, pinfo
, tree
, offset
, hf_openwire_none
, iCommand
, parentType
, false);
1289 else if (tvb_reported_length_remaining(tvb
, offset
) > 0)
1291 expert_add_info_format(pinfo
, tree
, &ei_openwire_command_not_supported
, "OpenWire command not supported by Wireshark: %d", iCommand
);
1295 return (offset
- startOffset
);
1299 dissect_openwire(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
1303 col_set_str(pinfo
->cinfo
, COL_PROTOCOL
, "OpenWire");
1304 col_clear(pinfo
->cinfo
, COL_INFO
);
1306 if (tvb_reported_length_remaining(tvb
, offset
) >= 5)
1309 proto_tree
*openwireroot_tree
;
1313 iCommand
= tvb_get_uint8(tvb
, offset
+ 4);
1315 col_append_sep_str(pinfo
->cinfo
, COL_INFO
, " | ",
1316 val_to_str_ext(iCommand
, &openwire_opcode_vals_ext
, "Unknown (0x%02x)"));
1317 col_set_fence(pinfo
->cinfo
, COL_INFO
);
1319 detect_protocol_options(tvb
, pinfo
, offset
, iCommand
);
1321 ti
= proto_tree_add_item(tree
, proto_openwire
, tvb
, offset
, -1, ENC_NA
);
1322 proto_item_append_text(ti
, " (%s)", val_to_str_ext(iCommand
, &openwire_opcode_vals_ext
, "Unknown (0x%02x)"));
1323 openwireroot_tree
= proto_item_add_subtree(ti
, ett_openwire
);
1325 proto_tree_add_item(openwireroot_tree
, hf_openwire_length
, tvb
, offset
+ 0, 4, ENC_BIG_ENDIAN
);
1327 /* Abort dissection if tight encoding is enabled*/
1328 if (iCommand
!= OPENWIRE_WIREFORMAT_INFO
&& retrieve_tight(pinfo
) == true)
1330 proto_tree_add_item(openwireroot_tree
, hf_openwire_command
, tvb
, offset
+ 4, 1, ENC_BIG_ENDIAN
);
1331 expert_add_info(pinfo
, openwireroot_tree
, &ei_openwire_tight_encoding_not_supported
);
1332 return tvb_captured_length(tvb
);
1335 caching
= retrieve_caching(pinfo
);
1338 proto_tree_add_boolean(openwireroot_tree
, hf_openwire_cached_enabled
, tvb
, offset
, 0, caching
);
1342 offset
+= dissect_openwire_command(tvb
, pinfo
, openwireroot_tree
, offset
, iCommand
);
1343 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
1345 expert_add_info_format(pinfo
, tree
, &ei_openwire_command_not_supported
, "OpenWire command fields unknown to Wireshark: %d", iCommand
);
1349 return tvb_captured_length(tvb
);
1353 get_openwire_pdu_len(packet_info
*pinfo _U_
, tvbuff_t
*tvb
, int offset
, void *data _U_
)
1355 return (tvb_get_ntohl(tvb
, offset
) + 4);
1359 dissect_openwire_tcp(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data
)
1361 tcp_dissect_pdus(tvb
, pinfo
, tree
, openwire_desegment
, 5, get_openwire_pdu_len
, dissect_openwire
, data
);
1362 return tvb_captured_length(tvb
);
1367 dissect_openwire_heur(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *data
)
1369 conversation_t
*conversation
;
1370 bool detected
= false;
1372 if (tvb_reported_length(tvb
) == 10 || tvb_reported_length(tvb
) == 11)
1374 /* KeepAlive is sent by default every 30 second. It is 10 bytes (loose) or 11 bytes (tight) long. */
1375 if ((tvb_get_uint8(tvb
, 4) == OPENWIRE_KEEP_ALIVE_INFO
)
1376 && (tvb_get_ntohl(tvb
, 0) + 4 == tvb_reported_length(tvb
)))
1381 else if (tvb_reported_length(tvb
) == 14 || tvb_reported_length(tvb
) == 15)
1383 /* Response is sent after several commands. It is 14 bytes (loose) or 15 bytes (tight) long. */
1384 if ((tvb_get_uint8(tvb
, 4) == OPENWIRE_RESPONSE
)
1385 && (tvb_get_ntohl(tvb
, 0) + 4 == tvb_reported_length(tvb
)))
1390 else if (tvb_reported_length(tvb
) >= 13)
1392 /* Only the WIREFORMAT_INFO command contains a "magic". It is the first command sent on a connection.
1393 If the capture was started after this command, a manual "Decode As..." might be required.
1395 if (tvb_captured_length(tvb
) >= 10
1396 && (tvb_get_uint8(tvb
, 4) == OPENWIRE_WIREFORMAT_INFO
)
1397 && (tvb_get_ntohl(tvb
, 5) == OPENWIRE_MAGIC_PART_1
)
1398 && (tvb_get_ntohl(tvb
, 9) == OPENWIRE_MAGIC_PART_2
))
1405 /* Register this dissector for this conversation */
1406 conversation
= find_or_create_conversation(pinfo
);
1407 conversation_set_dissector(conversation
, openwire_tcp_handle
);
1409 /* Dissect the packet */
1410 dissect_openwire(tvb
, pinfo
, tree
, data
);
1417 proto_register_openwire(void)
1419 static hf_register_info hf
[] = {
1420 { &hf_openwire_length
,
1421 { "Length", "openwire.length", FT_UINT32
, BASE_DEC
, NULL
, 0x0, "OpenWire length", HFILL
}},
1423 { &hf_openwire_command
,
1424 { "Command", "openwire.command", FT_UINT8
, BASE_DEC
, VALS(openwire_opcode_vals
), 0x0, "Openwire command", HFILL
}},
1426 { &hf_openwire_command_id
,
1427 { "Command Id", "openwire.command.id", FT_UINT32
, BASE_DEC
, NULL
, 0x0, "Openwire command id", HFILL
}},
1429 { &hf_openwire_command_response_required
,
1430 { "Command response required", "openwire.command.response_required", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire command response required", HFILL
}},
1432 { &hf_openwire_response_correlationid
,
1433 { "CorrelationId", "openwire.response.correlationid", FT_INT32
, BASE_DEC
, NULL
, 0x0, "Openwire Response CorrelationId", HFILL
}},
1435 { &hf_openwire_dataresponse_data
,
1436 { "Data", "openwire.responsedata.data", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire ResponseData Data", HFILL
}},
1438 { &hf_openwire_exceptionresponse_exception
,
1439 { "Exception", "openwire.exceptionresponse.exception", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire ExceptionResponse Exception", HFILL
}},
1441 { &hf_openwire_connectionerror_exception
,
1442 { "Exception", "openwire.connectionerror.exception", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire ConnectionError Exception", HFILL
}},
1444 { &hf_openwire_connectionerror_connectionid
,
1445 { "ConnectionId", "openwire.connectionerror.connectionid", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire ConnectionError ConnectionId", HFILL
}},
1447 { &hf_openwire_controlcommand_command
,
1448 { "Command", "openwire.controlcommand.command", FT_STRINGZ
, BASE_NONE
, NULL
, 0x0, "Openwire ControlCommand Command", HFILL
}},
1450 { &hf_openwire_wireformatinfo_magic
,
1451 { "Magic", "openwire.wireformatinfo.magic", FT_STRINGZ
, BASE_NONE
, NULL
, 0x0, "Openwire WireFormatInfo Magic", HFILL
}},
1453 { &hf_openwire_wireformatinfo_version
,
1454 { "Version", "openwire.wireformatinfo.version", FT_UINT32
, BASE_DEC
, NULL
, 0x0, "Openwire WireFormatInfo Version", HFILL
}},
1456 { &hf_openwire_wireformatinfo_data
,
1457 { "Data", "openwire.wireformatinfo.data", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire WireFormatInfo Data", HFILL
}},
1459 { &hf_openwire_wireformatinfo_length
,
1460 { "Length", "openwire.wireformatinfo.length", FT_UINT32
, BASE_DEC
, NULL
, 0x0, "Openwire WireFormatInfo Length", HFILL
}},
1462 { &hf_openwire_sessioninfo_sessionid
,
1463 { "SessionId", "openwire.sessioninfo.sessionid", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire SessionInfo SessionId", HFILL
}},
1465 { &hf_openwire_destinationinfo_connectionid
,
1466 { "ConnectionId", "openwire.destinationinfo.connectionid", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire DestinationInfo ConnectionId", HFILL
}},
1468 { &hf_openwire_destinationinfo_destination
,
1469 { "Destination", "openwire.destinationinfo.destination", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire DestinationInfo Destination", HFILL
}},
1471 { &hf_openwire_destinationinfo_operationtype
,
1472 { "OperationType", "openwire.destinationinfo.operationtype", FT_UINT8
, BASE_DEC
, VALS(openwire_operation_type_vals
), 0x0, "Openwire DestinationInfo OperationType", HFILL
}},
1474 { &hf_openwire_destinationinfo_timeout
,
1475 { "Timeout", "openwire.destinationinfo.timeout", FT_INT64
, BASE_DEC
, NULL
, 0x0, "Openwire DestinationInfo Timeout", HFILL
}},
1477 { &hf_openwire_destinationinfo_brokerpath
,
1478 { "BrokerPath", "openwire.destinationinfo.brokerpath", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire DestinationInfo BrokerPath", HFILL
}},
1480 { &hf_openwire_brokerinfo_brokerid
,
1481 { "BrokerId", "openwire.brokerinfo.brokerid", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire BrokerInfo BrokerId", HFILL
}},
1483 { &hf_openwire_brokerinfo_brokerurl
,
1484 { "BrokerURL", "openwire.brokerinfo.brokerurl", FT_STRINGZ
, BASE_NONE
, NULL
, 0x0, "Openwire BrokerInfo BrokerURL", HFILL
}},
1486 { &hf_openwire_brokerinfo_peerbrokerinfos
,
1487 { "PeerBrokerInfos", "openwire.brokerinfo.peerbrokerinfos", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire BrokerInfo PeerBrokerInfos", HFILL
}},
1489 { &hf_openwire_brokerinfo_brokername
,
1490 { "BrokerName", "openwire.brokerinfo.brokername", FT_STRINGZ
, BASE_NONE
, NULL
, 0x0, "Openwire BrokerInfo BrokerName", HFILL
}},
1492 { &hf_openwire_brokerinfo_slavebroker
,
1493 { "SlaveBroker", "openwire.brokerinfo.slavebroker", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire BrokerInfo SlaveBroker", HFILL
}},
1495 { &hf_openwire_brokerinfo_masterbroker
,
1496 { "MasterBroker", "openwire.brokerinfo.masterbroker", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire BrokerInfo MasterBroker", HFILL
}},
1498 { &hf_openwire_brokerinfo_faulttolerantconfiguration
,
1499 { "FaultTolerantConfiguration", "openwire.brokerinfo.faulttolerantconfiguration", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire BrokerInfo FaultTolerantConfiguration", HFILL
}},
1501 { &hf_openwire_brokerinfo_duplexconnection
,
1502 { "DuplexConnection", "openwire.brokerinfo.duplexconnection", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire BrokerInfo DuplexConnection", HFILL
}},
1504 { &hf_openwire_brokerinfo_networkconnection
,
1505 { "NetworkConnection", "openwire.brokerinfo.networkconnection", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire BrokerInfo NetworkConnection", HFILL
}},
1507 { &hf_openwire_brokerinfo_connectionid
,
1508 { "ConnectionId", "openwire.brokerinfo.connectionid", FT_INT64
, BASE_DEC
, NULL
, 0x0, "Openwire BrokerInfo ConnectionId", HFILL
}},
1510 { &hf_openwire_brokerinfo_brokeruploadurl
,
1511 { "BrokerUploadUrl", "openwire.brokerinfo.brokeruploadurl", FT_STRINGZ
, BASE_NONE
, NULL
, 0x0, "Openwire BrokerInfo BrokerUploadUrl", HFILL
}},
1513 { &hf_openwire_brokerinfo_networkproperties
,
1514 { "NetworkProperties", "openwire.brokerinfo.networkproperties", FT_STRINGZ
, BASE_NONE
, NULL
, 0x0, "Openwire BrokerInfo NetworkProperties", HFILL
}},
1516 { &hf_openwire_connectioninfo_connectionid
,
1517 { "ConnectionId", "openwire.connectioninfo.connectionid", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire ConnectionInfo ConnectionId", HFILL
}},
1519 { &hf_openwire_connectioninfo_clientid
,
1520 { "ClientId", "openwire.connectioninfo.clientid", FT_STRINGZ
, BASE_NONE
, NULL
, 0x0, "Openwire ConnectionInfo ClientId", HFILL
}},
1522 { &hf_openwire_connectioninfo_password
,
1523 { "Password", "openwire.connectioninfo.password", FT_STRINGZ
, BASE_NONE
, NULL
, 0x0, "Openwire ConnectionInfo Password", HFILL
}},
1525 { &hf_openwire_connectioninfo_username
,
1526 { "UserName", "openwire.connectioninfo.username", FT_STRINGZ
, BASE_NONE
, NULL
, 0x0, "Openwire ConnectionInfo UserName", HFILL
}},
1528 { &hf_openwire_connectioninfo_brokerpath
,
1529 { "BrokerPath", "openwire.connectioninfo.brokerpath", FT_BYTES
, BASE_NONE
, NULL
, 0x0, "Openwire ConnectionInfo BrokerPath", HFILL
}},
1531 { &hf_openwire_connectioninfo_brokermasterconnector
,
1532 { "BrokerMasterConnector", "openwire.connectioninfo.brokermasterconnector", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire ConnectionInfo BrokerMasterConnector", HFILL
}},
1534 { &hf_openwire_connectioninfo_manageable
,
1535 { "Manageable", "openwire.connectioninfo.manageable", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire ConnectionInfo Manageable", HFILL
}},
1537 { &hf_openwire_connectioninfo_clientmaster
,
1538 { "ClientMaster", "openwire.connectioninfo.clientmaster", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire ConnectionInfo ClientMaster", HFILL
}},
1540 { &hf_openwire_connectioninfo_faulttolerant
,
1541 { "FaultTolerant", "openwire.connectioninfo.faulttolerant", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire ConnectionInfo FaultTolerant", HFILL
}},
1543 { &hf_openwire_connectioninfo_failoverreconnect
,
1544 { "FailoverReconnect", "openwire.connectioninfo.failoverreconnect", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire ConnectionInfo FailoverReconnect", HFILL
} },
1546 { &hf_openwire_consumerinfo_consumerid
,
1547 { "ConsumerId", "openwire.consumerinfo.consumerid", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire ConsumerInfo ConsumerId", HFILL
}},
1549 { &hf_openwire_consumerinfo_browser
,
1550 { "Browser", "openwire.consumerinfo.browser", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire ConsumerInfo Browser", HFILL
}},
1552 { &hf_openwire_consumerinfo_destination
,
1553 { "Destination", "openwire.consumerinfo.destination", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire ConsumerInfo Destination", HFILL
}},
1555 { &hf_openwire_consumerinfo_prefetchsize
,
1556 { "PrefetchSize", "openwire.consumerinfo.prefetchsize", FT_INT32
, BASE_DEC
, NULL
, 0x0, "Openwire ConsumerInfo PrefetchSize", HFILL
}},
1558 { &hf_openwire_consumerinfo_maximumpendingmessagelimit
,
1559 { "MaximumPendingMessageLimit", "openwire.consumerinfo.maximumpendingmessagelimit", FT_INT32
, BASE_DEC
, NULL
, 0x0, "Openwire ConsumerInfo MaximumPendingMessageLimit", HFILL
}},
1561 { &hf_openwire_consumerinfo_dispatchasync
,
1562 { "DispatchAsync", "openwire.consumerinfo.dispatchasync", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire ConsumerInfo DispatchAsync", HFILL
}},
1564 { &hf_openwire_consumerinfo_selector
,
1565 { "Selector", "openwire.consumerinfo.selector", FT_STRINGZ
, BASE_NONE
, NULL
, 0x0, "Openwire ConsumerInfo Selector", HFILL
}},
1567 { &hf_openwire_consumerinfo_subscriptionname
,
1568 { "SubscriptionName", "openwire.consumerinfo.subscriptionname", FT_STRINGZ
, BASE_NONE
, NULL
, 0x0, "Openwire ConsumerInfo SubscriptionName", HFILL
}},
1570 { &hf_openwire_consumerinfo_nolocal
,
1571 { "NoLocal", "openwire.consumerinfo.nolocal", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire ConsumerInfo NoLocal", HFILL
}},
1573 { &hf_openwire_consumerinfo_exclusive
,
1574 { "Exclusive", "openwire.consumerinfo.exclusive", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire ConsumerInfo Exclusive", HFILL
}},
1576 { &hf_openwire_consumerinfo_retroactive
,
1577 { "RetroActive", "openwire.consumerinfo.retroactive", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire ConsumerInfo RetroActive", HFILL
}},
1579 { &hf_openwire_consumerinfo_priority
,
1580 { "Priority", "openwire.consumerinfo.priority", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire ConsumerInfo Priority", HFILL
}},
1582 { &hf_openwire_consumerinfo_brokerpath
,
1583 { "BrokerPath", "openwire.consumerinfo.brokerpath", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire ConsumerInfo BrokerPath", HFILL
}},
1585 { &hf_openwire_consumerinfo_additionalpredicate
,
1586 { "AdditionalPredicate", "openwire.consumerinfo.additionalpredicate", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire ConsumerInfo AdditionalPredicate", HFILL
}},
1588 { &hf_openwire_consumerinfo_networksubscription
,
1589 { "NetworkSubscription", "openwire.consumerinfo.networksubscription", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire ConsumerInfo NetworkSubscription", HFILL
}},
1591 { &hf_openwire_consumerinfo_optimizedacknowledge
,
1592 { "OptimizedAcknowledge", "openwire.consumerinfo.optimizedacknowledge", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire ConsumerInfo OptimizedAcknowledge", HFILL
}},
1594 { &hf_openwire_consumerinfo_norangeacks
,
1595 { "NoRangeAcks", "openwire.consumerinfo.norangeacks", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire ConsumerInfo NoRangeAcks", HFILL
}},
1597 { &hf_openwire_consumerinfo_networkconsumerpath
,
1598 { "NetworkConsumerPath", "openwire.consumerinfo.networkconsumerpath", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire ConsumerInfo NetworkConsumerPath", HFILL
}},
1600 { &hf_openwire_consumercontrol_destination
,
1601 { "Destination", "openwire.consumercontrol.destination", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire ConsumerControl Destination", HFILL
}},
1603 { &hf_openwire_consumercontrol_close
,
1604 { "Close", "openwire.consumercontrol.close", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire ConsumerControl Close", HFILL
}},
1606 { &hf_openwire_consumercontrol_consumerid
,
1607 { "ConsumerId", "openwire.consumercontrol.consumerid", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire ConsumerControl ConsumerId", HFILL
}},
1609 { &hf_openwire_consumercontrol_prefetch
,
1610 { "Prefetch", "openwire.consumercontrol.prefetch", FT_INT32
, BASE_DEC
, NULL
, 0x0, "Openwire ConsumerControl Prefetch", HFILL
}},
1612 { &hf_openwire_consumercontrol_flush
,
1613 { "Flush", "openwire.consumercontrol.flush", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire ConsumerControl Flush", HFILL
}},
1615 { &hf_openwire_consumercontrol_start
,
1616 { "Start", "openwire.consumercontrol.start", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire ConsumerControl Start", HFILL
}},
1618 { &hf_openwire_consumercontrol_stop
,
1619 { "Stop", "openwire.consumercontrol.stop", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire ConsumerControl Stop", HFILL
}},
1621 { &hf_openwire_connectioncontrol_close
,
1622 { "Close", "openwire.connectioncontrol.close", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire ConnectionControl Close", HFILL
}},
1624 { &hf_openwire_connectioncontrol_exit
,
1625 { "Exit", "openwire.connectioncontrol.exit", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire ConnectionControl Exit", HFILL
}},
1627 { &hf_openwire_connectioncontrol_faulttolerant
,
1628 { "FaultTolerant", "openwire.connectioncontrol.faulttolerant", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire ConnectionControl FaultTolerant", HFILL
}},
1630 { &hf_openwire_connectioncontrol_resume
,
1631 { "Resume", "openwire.connectioncontrol.resume", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire ConnectionControl Resume", HFILL
}},
1633 { &hf_openwire_connectioncontrol_suspend
,
1634 { "Suspend", "openwire.connectioncontrol.suspend", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire ConnectionControl Suspend", HFILL
}},
1636 { &hf_openwire_connectioncontrol_connectedbrokers
,
1637 { "ConnectedBrokers", "openwire.connectioncontrol.connectedbrokers", FT_STRINGZ
, BASE_NONE
, NULL
, 0x0, "Openwire ConnectionControl ConnectedBrokers", HFILL
}},
1639 { &hf_openwire_connectioncontrol_reconnectto
,
1640 { "ReconnectTo", "openwire.connectioncontrol.reconnectto", FT_STRINGZ
, BASE_NONE
, NULL
, 0x0, "Openwire ConnectionControl ReconnectTo", HFILL
}},
1642 { &hf_openwire_connectioncontrol_rebalanceconnection
,
1643 { "RebalanceConnection", "openwire.connectioncontrol.rebalanceconnection", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire ConnectionControl RebalanceConnection", HFILL
}},
1645 { &hf_openwire_removeinfo_objectid
,
1646 { "ObjectId", "openwire.removeinfo.objectid", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire RemoveInfo ObjectId", HFILL
}},
1648 { &hf_openwire_removeinfo_lastdeliveredsequenceid
,
1649 { "LastDeliveredSequenceId", "openwire.removeinfo.lastdeliveredsequenceid", FT_INT64
, BASE_DEC
, NULL
, 0x0, "Openwire RemoveInfo LastDeliveredSequenceId" , HFILL
}},
1651 { &hf_openwire_removesubscriptioninfo_connectionid
,
1652 { "ConnectionId", "openwire.removesubscriptioninfo.connectionid", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire RemoveSubscriptionInfo ConnectionId", HFILL
} },
1654 { &hf_openwire_removesubscriptioninfo_subscriptionname
,
1655 { "SubscriptionName", "openwire.removesubscriptioninfo.subscriptionname", FT_STRINGZ
, BASE_NONE
, NULL
, 0x0, "Openwire RemoveSubscriptionInfo SubscriptionName", HFILL
}},
1657 { &hf_openwire_removesubscriptioninfo_clientid
,
1658 { "ClientId", "openwire.removesubscriptioninfo.clientid", FT_STRINGZ
, BASE_NONE
, NULL
, 0x0, "Openwire RemoveSubscriptionInfo ClientId", HFILL
}},
1660 { &hf_openwire_producerinfo_producerid
,
1661 { "ProducerId", "openwire.producerinfo.producerid", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire ProducerInfo ProducerId", HFILL
}},
1663 { &hf_openwire_producerinfo_destination
,
1664 { "Destination", "openwire.producerinfo.destination", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire ProducerInfo Destination", HFILL
}},
1666 { &hf_openwire_producerinfo_brokerpath
,
1667 { "BrokerPath", "openwire.producerinfo.brokerpath", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire ProducerInfo BrokerPath", HFILL
}},
1669 { &hf_openwire_producerinfo_dispatchasync
,
1670 { "DispatchAsync", "openwire.producerinfo.dispatchasync", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire ProducerInfo DispatchAsync", HFILL
}},
1672 { &hf_openwire_producerinfo_windowsize
,
1673 { "WindowSize", "openwire.producerinfo.windowsize", FT_INT32
, BASE_DEC
, NULL
, 0x0, "Openwire ProducerInfo WindowSize", HFILL
}},
1675 { &hf_openwire_transactioninfo_connectionid
,
1676 { "ConnectionId", "openwire.transactioninfo.connectionid", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire TransactionInfo ConnectionId", HFILL
}},
1678 { &hf_openwire_transactioninfo_transactionid
,
1679 { "TransactionId", "openwire.transactioninfo.transactionid", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire TransactionInfo TransactionId", HFILL
}},
1681 { &hf_openwire_transactioninfo_type
,
1682 { "Type", "openwire.transactioninfo.type", FT_UINT8
, BASE_DEC
, VALS(openwire_transaction_type_vals
), 0x0, "Openwire TransactionInfo Type", HFILL
}},
1684 { &hf_openwire_producerack_producerid
,
1685 { "ProducerId", "openwire.producerack.producerid", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire ProducerAck ProducerId", HFILL
}},
1687 { &hf_openwire_producerack_size
,
1688 { "Size", "openwire.producerack.size", FT_INT32
, BASE_DEC
, NULL
, 0x0, "Openwire ProducerAck Size", HFILL
}},
1690 { &hf_openwire_messagedispatch_consumerid
,
1691 { "ConsumerId", "openwire.messagedispatch.consumerid", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire MessageDispatch ConsumerId", HFILL
}},
1693 { &hf_openwire_messagedispatch_destination
,
1694 { "Destination", "openwire.messagedispatch.destination", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire MessageDispatch Destination", HFILL
}},
1696 { &hf_openwire_messagedispatch_message
,
1697 { "Message", "openwire.messagedispatch.message", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire MessageDispatch Message", HFILL
}},
1699 { &hf_openwire_messagedispatch_redeliverycounter
,
1700 { "RedeliveryCounter", "openwire.messagedispatch.redeliverycounter", FT_INT32
, BASE_DEC
, NULL
, 0x0, "Openwire MessageDispatch RedeliveryCounter", HFILL
}},
1702 { &hf_openwire_messageack_destination
,
1703 { "Destination", "openwire.messageack.destination", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire MessageAck Destination", HFILL
}},
1705 { &hf_openwire_messageack_transactionid
,
1706 { "TransactionId", "openwire.messageack.transactionid", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire MessageAck TransactionId", HFILL
}},
1708 { &hf_openwire_messageack_consumerid
,
1709 { "ConsumerId", "openwire.messageack.consumerid", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire MessageAck ConsumerId", HFILL
}},
1711 { &hf_openwire_messageack_acktype
,
1712 { "AckType", "openwire.messageack.acktype", FT_UINT8
, BASE_DEC
, VALS(openwire_message_ack_type_vals
), 0x0, "Openwire MessageAck AckType", HFILL
}},
1714 { &hf_openwire_messageack_firstmessageid
,
1715 { "FirstMessageId", "openwire.messageack.firstmessageid", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire MessageAck FirstMessageId", HFILL
}},
1717 { &hf_openwire_messageack_lastmessageid
,
1718 { "LastMessageId", "openwire.messageack.lastmessageid", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire MessageAck LastMessageId", HFILL
}},
1720 { &hf_openwire_messageack_messagecount
,
1721 { "MessageCount", "openwire.messageack.messagecount", FT_INT32
, BASE_DEC
, NULL
, 0x0, "Openwire MessageAck MessageCount", HFILL
}},
1723 { &hf_openwire_messagepull_consumerid
,
1724 { "ConsumerId", "openwire.messagepull.consumerid", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire MessagePull ConsumerId", HFILL
}},
1726 { &hf_openwire_messagepull_destinationid
,
1727 { "DestinationId", "openwire.messagepull.destinationid", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire MessagePull DestinationId", HFILL
}},
1729 { &hf_openwire_messagepull_timeout
,
1730 { "Timeout", "openwire.messagepull.timeout", FT_INT64
, BASE_DEC
, NULL
, 0x0, "Openwire MessagePull Timeout", HFILL
}},
1732 { &hf_openwire_messagepull_correlationid
,
1733 { "CorrelationId", "openwire.messagepull.correlationid", FT_STRINGZ
, BASE_NONE
, NULL
, 0x0, "Openwire MessagePull CorrelationId", HFILL
}},
1735 { &hf_openwire_messagepull_messageid
,
1736 { "MessageId", "openwire.messagepull.messageid", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire MessagePull MessageId", HFILL
}},
1738 { &hf_openwire_message_producerid
,
1739 { "ProducerId", "openwire.message.producerid", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire message ProducerID", HFILL
}},
1741 { &hf_openwire_message_destination
,
1742 { "Destination", "openwire.message.destination", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire message Destination", HFILL
}},
1744 { &hf_openwire_message_transactionid
,
1745 { "TransactionId", "openwire.message.transactionid", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire message TransactionId", HFILL
}},
1747 { &hf_openwire_message_originaldestination
,
1748 { "OriginalDestination", "openwire.message.originaldestination", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire message OriginalDestination", HFILL
}},
1750 { &hf_openwire_message_messageid
,
1751 { "MessageId", "openwire.message.messageid", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire message MessageId", HFILL
}},
1753 { &hf_openwire_message_originaldestinationid
,
1754 { "OriginalDestinationId", "openwire.message.originaldestinationid", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire message OriginalDestinationId", HFILL
}},
1756 { &hf_openwire_message_groupid
,
1757 { "GroupID", "openwire.message.groupid", FT_STRINGZ
, BASE_NONE
, NULL
, 0x0, "Openwire message GroupID", HFILL
}},
1759 { &hf_openwire_message_groupsequence
,
1760 { "GroupSequence", "openwire.message.groupsequence", FT_INT32
, BASE_DEC
, NULL
, 0x0, "Openwire message GroupSequence", HFILL
}},
1762 { &hf_openwire_message_correlationid
,
1763 { "CorrelationId", "openwire.message.correlationid", FT_STRINGZ
, BASE_NONE
, NULL
, 0x0, "Openwire message CorrelationID", HFILL
}},
1765 { &hf_openwire_message_persistent
,
1766 { "Persistent", "openwire.message.persistent", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire message Persistent", HFILL
}},
1768 { &hf_openwire_message_expiration
,
1769 { "Expiration", "openwire.message.expiration", FT_INT64
, BASE_DEC
, NULL
, 0x0, "Openwire message Expiration", HFILL
}},
1771 { &hf_openwire_message_priority
,
1772 { "Priority", "openwire.message.priority", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire message Priority", HFILL
}},
1774 { &hf_openwire_message_replyto
,
1775 { "ReplyTo", "openwire.message.replyto", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire message ReplyTo", HFILL
}},
1777 { &hf_openwire_message_timestamp
,
1778 { "Timestamp", "openwire.message.timestamp", FT_INT64
, BASE_DEC
, NULL
, 0x0, "Openwire message Timestamp", HFILL
}},
1780 { &hf_openwire_message_type
,
1781 { "Type", "openwire.message.type", FT_STRINGZ
, BASE_NONE
, NULL
, 0x0, "Openwire message Type", HFILL
}},
1783 { &hf_openwire_message_body
,
1784 { "Body", "openwire.message.body", FT_BYTES
, BASE_NONE
, NULL
, 0x0, "Openwire message Body", HFILL
}},
1786 { &hf_openwire_message_properties
,
1787 { "Properties", "openwire.message.properties", FT_BYTES
, BASE_NONE
, NULL
, 0x0, "Openwire message Properties", HFILL
}},
1789 { &hf_openwire_message_datastructure
,
1790 { "DataStructure", "openwire.message.datastructure", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire message DataStructure", HFILL
}},
1792 { &hf_openwire_message_targetconsumerid
,
1793 { "TargetConsumerId", "openwire.message.targetconsumerid", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire message TargetConsumerId", HFILL
}},
1795 { &hf_openwire_message_compressed
,
1796 { "Compressed", "openwire.message.compressed", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire message Compressed", HFILL
}},
1798 { &hf_openwire_message_redeliverycount
,
1799 { "RedeliveryCount", "openwire.message.redeliverycount", FT_INT32
, BASE_DEC
, NULL
, 0x0, "Openwire message RedeliveryCount", HFILL
}},
1801 { &hf_openwire_message_brokerpath
,
1802 { "BrokerPath", "openwire.message.brokerpath", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire message BrokerPath", HFILL
}},
1804 { &hf_openwire_message_arrival
,
1805 { "Arrival", "openwire.message.arrival", FT_INT64
, BASE_DEC
, NULL
, 0x0, "Openwire message Arrival", HFILL
}},
1807 { &hf_openwire_message_userid
,
1808 { "UserID", "openwire.message.userid", FT_STRINGZ
, BASE_NONE
, NULL
, 0x0, "Openwire message UserID", HFILL
}},
1810 { &hf_openwire_message_receivedbydfbridge
,
1811 { "ReceivedByDFBridge", "openwire.message.receivedbydfbridge", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire message ReceivedByDFBridge", HFILL
}},
1813 { &hf_openwire_message_droppable
,
1814 { "Droppable", "openwire.message.droppable", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire message Droppable", HFILL
}},
1816 { &hf_openwire_message_cluster
,
1817 { "Cluster", "openwire.message.cluster", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire message Cluster", HFILL
}},
1819 { &hf_openwire_message_brokerintime
,
1820 { "BrokerInTime", "openwire.message.brokerintime", FT_INT64
, BASE_DEC
, NULL
, 0x0, "Openwire message BrokerInTime", HFILL
}},
1822 { &hf_openwire_message_brokerouttime
,
1823 { "BrokerOutTime", "openwire.message.brokerouttime", FT_INT64
, BASE_DEC
, NULL
, 0x0, "Openwire message BrokerOutTime", HFILL
}},
1825 { &hf_openwire_producerid_connectionid
,
1826 { "ConnectionId", "openwire.producerid.connectionid", FT_STRINGZ
, BASE_NONE
, NULL
, 0x0, "Openwire ProducerId ConnectionId", HFILL
}},
1828 { &hf_openwire_producerid_value
,
1829 { "Value", "openwire.producerid.value", FT_INT64
, BASE_DEC
, NULL
, 0x0, "Openwire ProducerId Value", HFILL
}},
1831 { &hf_openwire_producerid_sessionid
,
1832 { "SessionId", "openwire.producerid.sessionid", FT_INT64
, BASE_DEC
, NULL
, 0x0, "Openwire ProducerId SessionId", HFILL
}},
1834 { &hf_openwire_consumerid_connectionid
,
1835 { "ConnectionId", "openwire.consumerid.connectionid", FT_STRINGZ
, BASE_NONE
, NULL
, 0x0, "Openwire ConsumerId ConnectionId", HFILL
}},
1837 { &hf_openwire_consumerid_value
,
1838 { "Value", "openwire.consumerid.value", FT_INT64
, BASE_DEC
, NULL
, 0x0, "Openwire ConsumerId Value", HFILL
}},
1840 { &hf_openwire_consumerid_sessionid
,
1841 { "SessionId", "openwire.consumerid.sessionid", FT_INT64
, BASE_DEC
, NULL
, 0x0, "Openwire ConsumerId SessionId", HFILL
}},
1843 { &hf_openwire_destination_name
,
1844 { "Name", "openwire.destination.name", FT_STRINGZ
, BASE_NONE
, NULL
, 0x0, "Openwire Destination Name", HFILL
}},
1846 { &hf_openwire_messageid_producerid
,
1847 { "ProducerId", "openwire.messageid.producerid", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire MessageId ProducerId", HFILL
}},
1849 { &hf_openwire_messageid_producersequenceid
,
1850 { "ProducerSequenceId", "openwire.messageid.producersequenceid", FT_INT64
, BASE_DEC
, NULL
, 0x0, "Openwire MessageId ProducerSequenceId", HFILL
}},
1852 { &hf_openwire_messageid_brokersequenceid
,
1853 { "BrokerSequenceId", "openwire.messageid.brokersequenceid", FT_INT64
, BASE_DEC
, NULL
, 0x0, "Openwire MessageId BrokerSequenceId", HFILL
}},
1855 { &hf_openwire_connectionid_value
,
1856 { "Value", "openwire.connectionid.value", FT_STRINGZ
, BASE_NONE
, NULL
, 0x0, "Openwire ConnectionId Value", HFILL
}},
1858 { &hf_openwire_sessionid_connectionid
,
1859 { "ConnectionId", "openwire.sessionid.connectionid", FT_STRINGZ
, BASE_NONE
, NULL
, 0x0, "Openwire SessionId ConnectionId", HFILL
}},
1861 { &hf_openwire_sessionid_value
,
1862 { "Value", "openwire.sessionid.value", FT_INT64
, BASE_DEC
, NULL
, 0x0, "Openwire SessionId Value", HFILL
}},
1864 { &hf_openwire_brokerid_value
,
1865 { "Value", "openwire.brokerid.value", FT_STRINGZ
, BASE_NONE
, NULL
, 0x0, "Openwire BrokerId Value", HFILL
}},
1867 { &hf_openwire_localtransactionid_value
,
1868 { "Value", "openwire.localtransactionid.value", FT_INT64
, BASE_DEC
, NULL
, 0x0, "Openwire LocalTransactionId Value", HFILL
}},
1870 { &hf_openwire_localtransactionid_connectionid
,
1871 { "ConnectionId", "openwire.localtransactionid.connectionid", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire LocalTransactionId ConnecctionId", HFILL
}},
1873 { &hf_openwire_xatransactionid_formatid
,
1874 { "FormatId", "openwire.xatransactionid.formatid", FT_INT32
, BASE_DEC
, NULL
, 0x0, "Openwire XATransactionId FormatId", HFILL
}},
1876 { &hf_openwire_xatransactionid_globaltransactionid
,
1877 { "GlobalTransactionId", "openwire.xatransactionid.globaltransactionid", FT_STRINGZ
, BASE_NONE
, NULL
, 0x0, "Openwire XATransactionId GlobalTransactionId", HFILL
}},
1879 { &hf_openwire_xatransactionid_branchqualifier
,
1880 { "BranchQualifier", "openwire.xatransactionid.branchqualifier", FT_STRINGZ
, BASE_NONE
, NULL
, 0x0, "Openwire XATransactionId BranchQualifier", HFILL
}},
1882 { &hf_openwire_none
,
1883 { "Generic field", "openwire.generic", FT_BYTES
, BASE_NONE
, NULL
, 0x0, "Openwire integer type", HFILL
}},
1885 { &hf_openwire_map_length
,
1886 { "Length", "openwire.map.length", FT_INT32
, BASE_DEC
, NULL
, 0x0, "Openwire map length", HFILL
}},
1888 { &hf_openwire_map_key
,
1889 { "Key", "openwire.map.key", FT_STRINGZ
, BASE_NONE
, NULL
, 0x0, "Openwire map Key", HFILL
}},
1891 { &hf_openwire_map_entry
,
1892 { "Entry", "openwire.map.entry", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire map Entry", HFILL
}},
1894 { &hf_openwire_throwable_class
,
1895 { "Class", "openwire.throwable.class", FT_STRINGZ
, BASE_NONE
, NULL
, 0x0, "Openwire Throwable Class", HFILL
}},
1897 { &hf_openwire_throwable_message
,
1898 { "Message", "openwire.throwable.message", FT_STRINGZ
, BASE_NONE
, NULL
, 0x0, "Openwire Throwable Message", HFILL
}},
1900 { &hf_openwire_throwable_element
,
1901 { "Element", "openwire.throwable.element", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire Throwable Element", HFILL
}},
1903 { &hf_openwire_throwable_classname
,
1904 { "ClassName", "openwire.throwable.classname", FT_STRINGZ
, BASE_NONE
, NULL
, 0x0, "Openwire Throwable ClassName", HFILL
}},
1906 { &hf_openwire_throwable_methodname
,
1907 { "MethodName", "openwire.throwable.methodname", FT_STRINGZ
, BASE_NONE
, NULL
, 0x0, "Openwire Throwable MethodName", HFILL
}},
1909 { &hf_openwire_throwable_filename
,
1910 { "FileName", "openwire.throwable.filename", FT_STRINGZ
, BASE_NONE
, NULL
, 0x0, "Openwire Throwable FileName", HFILL
}},
1912 { &hf_openwire_throwable_linenumber
,
1913 { "LineNumber", "openwire.throwable.linenumber", FT_UINT32
, BASE_DEC
, NULL
, 0x0, "Openwire Throwable LineNumber", HFILL
}},
1915 { &hf_openwire_type_integer
,
1916 { "Integer", "openwire.type.integer", FT_INT32
, BASE_DEC
, NULL
, 0x0, "Openwire Integer type", HFILL
}},
1918 { &hf_openwire_type_short
,
1919 { "Short", "openwire.type.short", FT_INT32
, BASE_DEC
, NULL
, 0x0, "Openwire Short type", HFILL
}},
1921 { &hf_openwire_type_string
,
1922 { "String", "openwire.type.string", FT_STRINGZ
, BASE_NONE
, NULL
, 0x0, "Openwire String type", HFILL
}},
1924 { &hf_openwire_type_bytes
,
1925 { "Bytes", "openwire.type.bytes", FT_BYTES
, BASE_NONE
, NULL
, 0x0, "Openwire Bytes type", HFILL
}},
1927 { &hf_openwire_type_boolean
,
1928 { "Boolean", "openwire.type.boolean", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire Boolean type", HFILL
}},
1930 { &hf_openwire_type_byte
,
1931 { "Byte", "openwire.type.byte", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire Byte type", HFILL
}},
1933 { &hf_openwire_type_char
,
1934 { "Char", "openwire.type.char", FT_UINT16
, BASE_DEC
, NULL
, 0x0, "Openwire Char type", HFILL
}},
1936 { &hf_openwire_type_long
,
1937 { "Long", "openwire.type.long", FT_INT64
, BASE_DEC
, NULL
, 0x0, "Openwire Cong type", HFILL
}},
1939 { &hf_openwire_type_float
,
1940 { "Float", "openwire.type.float", FT_FLOAT
, BASE_NONE
, NULL
, 0x0, "Openwire Float type", HFILL
}},
1942 { &hf_openwire_type_double
,
1943 { "Double", "openwire.type.double", FT_DOUBLE
, BASE_NONE
, NULL
, 0x0, "Openwire Double type", HFILL
}},
1945 { &hf_openwire_type_notnull
,
1946 { "NotNull", "openwire.type.notnull", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire NotNull type", HFILL
}},
1948 { &hf_openwire_cached_inlined
,
1949 { "Inlined", "openwire.cached.inlined", FT_UINT8
, BASE_DEC
, NULL
, 0x0, "Openwire Cached Inlined", HFILL
}},
1951 { &hf_openwire_cached_id
,
1952 { "CachedID", "openwire.cached.id", FT_UINT16
, BASE_DEC
, NULL
, 0x0, "Openwire Cached ID", HFILL
}},
1954 { &hf_openwire_cached_enabled
,
1955 { "CachedEnabled", "openwire.cached.enabled", FT_BOOLEAN
, BASE_NONE
, NULL
, 0x0, "Openwire Cached Enabled", HFILL
}},
1957 { &hf_openwire_type_object
,
1958 { "Object", "openwire.type.object", FT_NONE
, BASE_NONE
, NULL
, 0x0, "Openwire object", HFILL
}},
1960 { &hf_openwire_type
,
1961 { "Type", "openwire.type", FT_UINT8
, BASE_DEC
, VALS(openwire_type_vals
), 0x0, "Openwire type", HFILL
}}
1964 static int *ett
[] = {
1969 static ei_register_info ei
[] = {
1970 { &ei_openwire_encoding_not_supported
, { "openwire.encoding_not_supported", PI_PROTOCOL
, PI_WARN
, "OpenWire encoding not supported by Wireshark or dissector bug", EXPFILL
}},
1971 { &ei_openwire_body_type_not_supported
, { "openwire.body_type_not_supported", PI_UNDECODED
, PI_NOTE
, "OpenWire body type not supported by Wireshark", EXPFILL
}},
1972 { &ei_openwire_type_not_supported
, { "openwire.type.not_supported", PI_UNDECODED
, PI_NOTE
, "OpenWire type not supported by Wireshark", EXPFILL
}},
1973 { &ei_openwire_command_not_supported
, { "openwire.command.not_supported", PI_UNDECODED
, PI_NOTE
, "OpenWire command not supported by Wireshark", EXPFILL
}},
1974 { &ei_openwire_tight_encoding_not_supported
, { "openwire.tight_encoding_not_supported", PI_UNDECODED
, PI_NOTE
, "OpenWire tight encoding not supported by Wireshark", EXPFILL
}},
1977 module_t
*openwire_module
;
1978 expert_module_t
* expert_openwire
;
1980 proto_openwire
= proto_register_protocol("OpenWire", "OpenWire", "openwire");
1981 proto_register_field_array(proto_openwire
, hf
, array_length(hf
));
1982 proto_register_subtree_array(ett
, array_length(ett
));
1983 expert_openwire
= expert_register_protocol(proto_openwire
);
1984 expert_register_field_array(expert_openwire
, ei
, array_length(ei
));
1986 openwire_tcp_handle
= register_dissector("openwire", dissect_openwire_tcp
, proto_openwire
);
1988 openwire_module
= prefs_register_protocol(proto_openwire
, NULL
);
1989 prefs_register_bool_preference(openwire_module
, "desegment",
1990 "Reassemble Openwire messages spanning multiple TCP segments",
1991 "Whether the Openwire dissector should reassemble messages spanning multiple TCP segments."
1992 " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
1993 &openwire_desegment
);
1994 prefs_register_bool_preference(openwire_module
, "verbose_type",
1995 "Show verbose type information",
1996 "Whether verbose type and length information are displayed in the protocol tree",
1997 &openwire_verbose_type
);
2001 proto_reg_handoff_openwire(void)
2003 heur_dissector_add("tcp", dissect_openwire_heur
, "OpenWire over TCP", "openwire_tcp", proto_openwire
, HEURISTIC_ENABLE
);
2004 dissector_add_for_decode_as_with_preference("tcp.port", openwire_tcp_handle
);
2008 * Editor modelines - https://www.wireshark.org/tools/modelines.html
2013 * indent-tabs-mode: nil
2016 * vi: set shiftwidth=4 tabstop=8 expandtab:
2017 * :indentSize=4:tabSize=8:noTabs=true: