diff options
author | sake <sake@f5534014-38df-0310-8fa8-9805f1628bb7> | 2008-04-15 21:12:38 +0000 |
---|---|---|
committer | sake <sake@f5534014-38df-0310-8fa8-9805f1628bb7> | 2008-04-15 21:12:38 +0000 |
commit | 6463328a796c8b35868a20635d22a93df360910a (patch) | |
tree | aac898ff83ca60256a27f2cd1a333ec509451a26 /epan/dissectors/packet-rpc.c | |
parent | 534d1afb947d138d3eef1f3001493f20332dd64b (diff) |
From Didier (bug 1392):
Add port to conversation key so that RPC reassembly works when relative
sequence numbers are used.
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@25055 f5534014-38df-0310-8fa8-9805f1628bb7
Diffstat (limited to 'epan/dissectors/packet-rpc.c')
-rw-r--r-- | epan/dissectors/packet-rpc.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/epan/dissectors/packet-rpc.c b/epan/dissectors/packet-rpc.c index 8af7e6b719..9e20a0a2ca 100644 --- a/epan/dissectors/packet-rpc.c +++ b/epan/dissectors/packet-rpc.c @@ -2728,6 +2728,7 @@ typedef struct _rpc_fragment_key { guint32 conv_id; guint32 seq; guint32 offset; + guint32 port; /* xxx */ guint32 start_seq; } rpc_fragment_key; @@ -2747,7 +2748,7 @@ rpc_fragment_equal(gconstpointer k1, gconstpointer k2) const rpc_fragment_key *key2 = (const rpc_fragment_key *)k2; return key1->conv_id == key2->conv_id && - key1->seq == key2->seq; + key1->seq == key2->seq && key1->port == key2->port; } static void @@ -3028,6 +3029,7 @@ dissect_rpc_fragment(tvbuff_t *tvb, int offset, packet_info *pinfo, } old_rfk.conv_id = conversation->index; old_rfk.seq = seq; + old_rfk.port = pinfo->srcport; rfk = g_hash_table_lookup(rpc_reassembly_table, &old_rfk); if (rfk == NULL) { @@ -3068,6 +3070,7 @@ dissect_rpc_fragment(tvbuff_t *tvb, int offset, packet_info *pinfo, rfk = se_alloc(sizeof(rpc_fragment_key)); rfk->conv_id = conversation->index; rfk->seq = seq; + rfk->port = pinfo->srcport; rfk->offset = 0; rfk->start_seq = seq; g_hash_table_insert(rpc_reassembly_table, rfk, rfk); @@ -3089,6 +3092,7 @@ dissect_rpc_fragment(tvbuff_t *tvb, int offset, packet_info *pinfo, new_rfk = se_alloc(sizeof(rpc_fragment_key)); new_rfk->conv_id = rfk->conv_id; new_rfk->seq = seq + len; + new_rfk->port = pinfo->srcport; new_rfk->offset = rfk->offset + len - 4; new_rfk->start_seq = rfk->start_seq; g_hash_table_insert(rpc_reassembly_table, new_rfk, @@ -3154,6 +3158,7 @@ dissect_rpc_fragment(tvbuff_t *tvb, int offset, packet_info *pinfo, new_rfk = se_alloc(sizeof(rpc_fragment_key)); new_rfk->conv_id = rfk->conv_id; new_rfk->seq = seq + len; + new_rfk->port = pinfo->srcport; new_rfk->offset = rfk->offset + len - 4; new_rfk->start_seq = rfk->start_seq; g_hash_table_insert(rpc_reassembly_table, new_rfk, |