diff options
author | Sake Blok <sake@euronet.nl> | 2008-04-15 21:12:38 +0000 |
---|---|---|
committer | Sake Blok <sake@euronet.nl> | 2008-04-15 21:12:38 +0000 |
commit | 3751e74f672aaa6398cb49779c03f3fea5851d1e (patch) | |
tree | aac898ff83ca60256a27f2cd1a333ec509451a26 /epan/dissectors/packet-rpc.c | |
parent | 15b3bb93dfb28ba3de4e85bed95c8ec03c2de32c (diff) |
From Didier (bug 1392):
Add port to conversation key so that RPC reassembly works when relative
sequence numbers are used.
svn path=/trunk/; revision=25055
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, |