forked from osmocom/wireshark
Added fragment_start_seq_check to start a reassembly without adding any data.
svn path=/trunk/; revision=22513
This commit is contained in:
parent
84e7d8ca70
commit
c6ba6d714d
|
@ -1691,6 +1691,46 @@ fragment_add_seq_next(tvbuff_t *tvb, int offset, packet_info *pinfo,
|
||||||
more_frags, REASSEMBLE_FLAGS_NO_FRAG_NUMBER);
|
more_frags, REASSEMBLE_FLAGS_NO_FRAG_NUMBER);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
fragment_start_seq_check(packet_info *pinfo, guint32 id, GHashTable *fragment_table,
|
||||||
|
guint32 tot_len)
|
||||||
|
{
|
||||||
|
fragment_key key, *new_key;
|
||||||
|
fragment_data *fd_head;
|
||||||
|
|
||||||
|
/* Have we already seen this frame ?*/
|
||||||
|
if (pinfo->fd->flags.visited) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Create key to search hash with */
|
||||||
|
key.src = pinfo->src;
|
||||||
|
key.dst = pinfo->dst;
|
||||||
|
key.id = id;
|
||||||
|
|
||||||
|
/* Check if fragment data exist for this key */
|
||||||
|
fd_head = g_hash_table_lookup(fragment_table, &key);
|
||||||
|
|
||||||
|
if (fd_head == NULL) {
|
||||||
|
/* Create list-head. */
|
||||||
|
fd_head = g_mem_chunk_alloc(fragment_data_chunk);
|
||||||
|
|
||||||
|
fd_head->next = NULL;
|
||||||
|
fd_head->datalen = tot_len;
|
||||||
|
fd_head->offset = 0;
|
||||||
|
fd_head->len = 0;
|
||||||
|
fd_head->flags = FD_BLOCKSEQUENCE|FD_DATALEN_SET;
|
||||||
|
fd_head->data = NULL;
|
||||||
|
fd_head->reassembled_in = 0;
|
||||||
|
/*
|
||||||
|
* We're going to use the key to insert the fragment,
|
||||||
|
* so copy it to a long-term store.
|
||||||
|
*/
|
||||||
|
new_key = fragment_key_copy(&key);
|
||||||
|
g_hash_table_insert(fragment_table, new_key, fd_head);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fragment_data *
|
fragment_data *
|
||||||
fragment_end_seq_next(packet_info *pinfo, guint32 id, GHashTable *fragment_table,
|
fragment_end_seq_next(packet_info *pinfo, guint32 id, GHashTable *fragment_table,
|
||||||
GHashTable *reassembled_table)
|
GHashTable *reassembled_table)
|
||||||
|
|
|
@ -217,6 +217,10 @@ fragment_add_seq_next(tvbuff_t *tvb, int offset, packet_info *pinfo, guint32 id,
|
||||||
GHashTable *fragment_table, GHashTable *reassembled_table,
|
GHashTable *fragment_table, GHashTable *reassembled_table,
|
||||||
guint32 frag_data_len, gboolean more_frags);
|
guint32 frag_data_len, gboolean more_frags);
|
||||||
|
|
||||||
|
extern void
|
||||||
|
fragment_start_seq_check(packet_info *pinfo, guint32 id, GHashTable *fragment_table,
|
||||||
|
guint32 tot_len);
|
||||||
|
|
||||||
extern fragment_data *
|
extern fragment_data *
|
||||||
fragment_end_seq_next(packet_info *pinfo, guint32 id, GHashTable *fragment_table,
|
fragment_end_seq_next(packet_info *pinfo, guint32 id, GHashTable *fragment_table,
|
||||||
GHashTable *reassembled_table);
|
GHashTable *reassembled_table);
|
||||||
|
|
Loading…
Reference in New Issue