aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-rpc.c
diff options
context:
space:
mode:
authorsake <sake@f5534014-38df-0310-8fa8-9805f1628bb7>2008-04-15 21:12:38 +0000
committersake <sake@f5534014-38df-0310-8fa8-9805f1628bb7>2008-04-15 21:12:38 +0000
commit6463328a796c8b35868a20635d22a93df360910a (patch)
treeaac898ff83ca60256a27f2cd1a333ec509451a26 /epan/dissectors/packet-rpc.c
parent534d1afb947d138d3eef1f3001493f20332dd64b (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.c7
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,