diff options
author | Ulf Lamping <ulf.lamping@web.de> | 2006-01-22 16:47:16 +0000 |
---|---|---|
committer | Ulf Lamping <ulf.lamping@web.de> | 2006-01-22 16:47:16 +0000 |
commit | 484325759683cad78c49de8a68bd57d031564133 (patch) | |
tree | e9ab9f800298616509768c775aec9d6c4a9b00fd | |
parent | 6f2c4c84c14b7c56d72abd648378ef6b3a9cc4da (diff) |
add fragment_get_reassembled_id so the handed id doesn't need to be a packet number (experimental)
add a check to fragment_add_common() if the given tvb parameters are ok, otherwise throw a DissectorError
add some more symbols to libethereal.def
svn path=/trunk/; revision=17073
-rw-r--r-- | epan/libethereal.def | 2 | ||||
-rw-r--r-- | epan/reassemble.c | 21 | ||||
-rw-r--r-- | epan/reassemble.h | 4 |
3 files changed, 27 insertions, 0 deletions
diff --git a/epan/libethereal.def b/epan/libethereal.def index 950c007d89..cfdf8a2dd7 100644 --- a/epan/libethereal.def +++ b/epan/libethereal.def @@ -256,6 +256,7 @@ fragment_add_seq_check fragment_add_seq_next fragment_delete fragment_get +fragment_get_reassembled_id fragment_get_tot_len fragment_set_partial_reassembly fragment_set_tot_len @@ -496,6 +497,7 @@ proto_tree_add_uint64 proto_tree_add_uint64_format proto_tree_children_foreach proto_tree_get_parent +proto_tree_move_item p_add_proto_data p_get_proto_data q931_cause_code_vals DATA diff --git a/epan/reassemble.c b/epan/reassemble.c index f7e1cfb588..6b93edae70 100644 --- a/epan/reassemble.c +++ b/epan/reassemble.c @@ -386,6 +386,7 @@ fragment_get(packet_info *pinfo, guint32 id, GHashTable *fragment_table) return fd_head; } +/* id *must* be the frame number for this to work! */ fragment_data * fragment_get_reassembled(packet_info *pinfo, guint32 id, GHashTable *reassembled_table) { @@ -400,6 +401,20 @@ fragment_get_reassembled(packet_info *pinfo, guint32 id, GHashTable *reassembled return fd_head; } +fragment_data * +fragment_get_reassembled_id(packet_info *pinfo, guint32 id, GHashTable *reassembled_table) +{ + fragment_data *fd_head; + reassembled_key key; + + /* create key to search hash with */ + key.frame = pinfo->fd->num; + key.id = id; + fd_head = g_hash_table_lookup(reassembled_table, &key); + + return fd_head; +} + /* This function can be used to explicitely set the total length (if known) * for reassembly of a PDU. * This is useful for reassembly of PDUs where one may have the total length specified @@ -803,6 +818,12 @@ fragment_add_common(tvbuff_t *tvb, int offset, packet_info *pinfo, guint32 id, fragment_data *fd_item; gboolean already_added=pinfo->fd->flags.visited; + + /* dissector shouldn't give us garbage tvb info */ + if(!tvb_bytes_exist(tvb, offset, frag_data_len)) { + THROW(DissectorError); + } + /* create key to search hash with */ key.src = pinfo->src; key.dst = pinfo->dst; diff --git a/epan/reassemble.h b/epan/reassemble.h index 69ebf94e1f..9c37cf058d 100644 --- a/epan/reassemble.h +++ b/epan/reassemble.h @@ -201,9 +201,13 @@ extern fragment_data * fragment_get(packet_info *pinfo, guint32 id, GHashTable *fragment_table); /* The same for the reassemble table */ +/* id *must* be the frame number for this to work! */ extern fragment_data * fragment_get_reassembled(packet_info *pinfo, guint32 id, GHashTable *reassembled_table); +extern fragment_data * +fragment_get_reassembled_id(packet_info *pinfo, guint32 id, GHashTable *reassembled_table); + /* This will free up all resources and delete reassembly state for this PDU. * Except if the PDU is completely reassembled, then it would NOT deallocate the * buffer holding the reassembled data but instead return the pointer to that |