aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-dbus.c
diff options
context:
space:
mode:
authorSimon Holesch <simon@holesch.de>2021-12-10 22:45:12 +0100
committerAndersBroman <a.broman58@gmail.com>2022-10-31 14:54:39 +0000
commit60aec65e9f2be4aa5fc1f1a270125e557b55924b (patch)
tree4f4a6cbdbcd7069b6a9877c4f31a7317cb3b3be4 /epan/dissectors/packet-dbus.c
parent8f6a640337d0554a74702ac877928478ed067ea8 (diff)
D-Bus: Add path, interface, member to responses
Add generated fields with the value from the request. D-Bus response frames don't include fields like "member", i.e. the method name. By adding generated fields it's easier to filter method calls and its method return by name.
Diffstat (limited to 'epan/dissectors/packet-dbus.c')
-rw-r--r--epan/dissectors/packet-dbus.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/epan/dissectors/packet-dbus.c b/epan/dissectors/packet-dbus.c
index 00fbfb57c4..1749ba44c1 100644
--- a/epan/dissectors/packet-dbus.c
+++ b/epan/dissectors/packet-dbus.c
@@ -240,6 +240,9 @@ typedef struct {
guint32 req_frame;
guint32 rep_frame;
nstime_t req_time;
+ const char *path;
+ const char *interface;
+ const char *member;
} dbus_transaction_t;
typedef struct {
@@ -1015,6 +1018,9 @@ add_conversation(dbus_packet_t *packet, proto_tree *header_field_tree) {
*trans = (dbus_transaction_t){
.req_frame = packet->pinfo->num,
.req_time = packet->pinfo->fd->abs_ts,
+ .path = wmem_strdup(wmem_file_scope(), packet->path),
+ .interface = wmem_strdup(wmem_file_scope(), packet->interface),
+ .member = wmem_strdup(wmem_file_scope(), packet->member),
};
wmem_map_insert(conv_info->packets, GUINT_TO_POINTER(packet->serial), (void *)trans);
} else {
@@ -1037,12 +1043,26 @@ add_conversation(dbus_packet_t *packet, proto_tree *header_field_tree) {
proto_item_set_generated(it);
} else {
nstime_t ns;
+ proto_item *it;
+ tvbuff_t *tvb = ptvcursor_tvbuff(packet->cursor);
+
+ it = proto_tree_add_string(header_field_tree, hf_dbus_path, tvb, 0, 0, trans->path);
+ proto_item_set_generated(it);
+ packet->path = trans->path;
+
+ it = proto_tree_add_string(header_field_tree, hf_dbus_interface, tvb, 0, 0, trans->interface);
+ proto_item_set_generated(it);
+ packet->interface = trans->interface;
+
+ it = proto_tree_add_string(header_field_tree, hf_dbus_member, tvb, 0, 0, trans->member);
+ proto_item_set_generated(it);
+ packet->member = trans->member;
- proto_item *it = proto_tree_add_uint(header_field_tree, hf_dbus_response_to, ptvcursor_tvbuff(packet->cursor), 0, 0, trans->req_frame);
+ it = proto_tree_add_uint(header_field_tree, hf_dbus_response_to, tvb, 0, 0, trans->req_frame);
proto_item_set_generated(it);
nstime_delta(&ns, &packet->pinfo->fd->abs_ts, &trans->req_time);
- it = proto_tree_add_time(header_field_tree, hf_dbus_response_time, ptvcursor_tvbuff(packet->cursor), 0, 0, &ns);
+ it = proto_tree_add_time(header_field_tree, hf_dbus_response_time, tvb, 0, 0, &ns);
proto_item_set_generated(it);
}
}