aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-woww.c
diff options
context:
space:
mode:
authorGtker <wireshark@gtker.com>2021-07-22 17:50:20 +0200
committerWireshark GitLab Utility <gerald+gitlab-utility@wireshark.org>2021-07-24 07:42:00 +0000
commit53314687705a36214875a47203608a74af0a83b4 (patch)
tree6d5d610eac45b3fe2ca9edb1f07947a67dbeb0ef /epan/dissectors/packet-woww.c
parenta8aebb8947594a175459b23c608ed9a112c1ec53 (diff)
WOWW: Make headers need decryption tree into map
In the future it will be necessary to index with a 64 bit int instead of a 32 bit one.
Diffstat (limited to 'epan/dissectors/packet-woww.c')
-rw-r--r--epan/dissectors/packet-woww.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/epan/dissectors/packet-woww.c b/epan/dissectors/packet-woww.c
index e3b6f33f56..2803e9cc6d 100644
--- a/epan/dissectors/packet-woww.c
+++ b/epan/dissectors/packet-woww.c
@@ -104,7 +104,7 @@ typedef struct WowwConversation {
wmem_map_t* decrypted_headers;
// Packets that are not fully decryptable when received will need
// to be decrypted later.
- wmem_tree_t* headers_need_decryption;
+ wmem_map_t* headers_need_decryption;
// The client and server will have different indices/last values
// because they send different amounts of packets and with different
// header lengths.
@@ -2043,7 +2043,7 @@ handle_packet_header(packet_info* pinfo,
return (WowwDecryptedHeader_t*)decrypted_header;
}
- WowwPreviousValues_t * original_header_values = wmem_tree_lookup32(wowwConversation->headers_need_decryption, pinfo->num);
+ WowwPreviousValues_t * original_header_values = wmem_map_lookup(wowwConversation->headers_need_decryption, &key);
if (original_header_values && !session_key_is_fully_deduced(wowwConversation->known_indices, headerSize, original_header_values->idx)) {
// If we have seen the header before AND
@@ -2059,7 +2059,11 @@ handle_packet_header(packet_info* pinfo,
WowwPreviousValues_t* array_index = wmem_alloc0(wmem_file_scope(), sizeof(WowwPreviousValues_t));
array_index->idx = participant->idx;
array_index->last_encrypted_value = participant->last_encrypted_value;
- wmem_tree_insert32(wowwConversation->headers_need_decryption, pinfo->num, array_index);
+
+ guint64* allocated_key = wmem_alloc0(wmem_file_scope(), sizeof(guint64));
+ *allocated_key = key;
+
+ wmem_map_insert(wowwConversation->headers_need_decryption, allocated_key, array_index);
// If it's a server header we can use it to deduce the session key
if (WOWW_CLIENT_TO_SERVER) {
@@ -2084,7 +2088,7 @@ handle_packet_header(packet_info* pinfo,
last_encrypted_value = &original_header_values->last_encrypted_value;
// No need to decrypt it again
- wmem_tree_remove32(wowwConversation->headers_need_decryption, pinfo->num);
+ wmem_map_remove(wowwConversation->headers_need_decryption, &key);
}
decrypted_header = get_decrypted_header(wowwConversation->session_key,
@@ -2173,7 +2177,7 @@ dissect_woww(tvbuff_t *tvb,
wowwConversation = (WowwConversation_t*) wmem_new0(wmem_file_scope(), WowwConversation_t);
conversation_add_proto_data(conv, proto_woww, wowwConversation);
wowwConversation->decrypted_headers = wmem_map_new(wmem_file_scope(), g_int64_hash, g_int64_equal);
- wowwConversation->headers_need_decryption = wmem_tree_new(wmem_file_scope());
+ wowwConversation->headers_need_decryption = wmem_map_new(wmem_file_scope(), g_int64_hash, g_int64_equal);
}
// Isolate session key for packet