diff options
author | etxrab <etxrab@f5534014-38df-0310-8fa8-9805f1628bb7> | 2011-02-08 12:33:34 +0000 |
---|---|---|
committer | etxrab <etxrab@f5534014-38df-0310-8fa8-9805f1628bb7> | 2011-02-08 12:33:34 +0000 |
commit | 84d957e2dc2f8d5eff63771fec3680f669c3fed8 (patch) | |
tree | e030e367870e73d50ab2d43e6ad69e80b861de46 | |
parent | 65c0288e1e756cdde4a7a1c8f3f255e376c52470 (diff) |
from Václav Horčák:
Bug 5663 - [PATCH] Fix for MEGACO dissector context tracking.
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=5663
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@35880 f5534014-38df-0310-8fa8-9805f1628bb7
-rw-r--r-- | epan/dissectors/packet-megaco.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/epan/dissectors/packet-megaco.c b/epan/dissectors/packet-megaco.c index 970325dce6..79c31a531e 100644 --- a/epan/dissectors/packet-megaco.c +++ b/epan/dissectors/packet-megaco.c @@ -528,7 +528,7 @@ dissect_megaco_text(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) tvb_LBRKT = tvb_find_guint8(tvb, tvb_offset, tvb_len, '{'); tvb_current_offset = tvb_LBRKT; tvb_transaction_end_offset = megaco_tvb_find_token(tvb, tvb_LBRKT - 1, tvb_len); - + switch ( token_index ){ /* errorDescriptor */ case ERRORTOKEN: @@ -1340,14 +1340,16 @@ nextcontext: } } while ( tvb_command_end_offset < tvb_transaction_end_offset ); - tvb_next_offset=megaco_tvb_skip_wsp(tvb, tvb_transaction_end_offset+1); - } - while( tvb_transaction_end_offset < tvb_len - 2); + + if (keep_persistent_data) { + gcp_msg_to_str(msg,keep_persistent_data); + gcp_analyze_msg(megaco_tree, tvb, msg, &megaco_ctx_ids ); + } + + tvb_next_offset = tvb_transaction_end_offset; - if (keep_persistent_data) { - gcp_msg_to_str(msg,keep_persistent_data); - gcp_analyze_msg(megaco_tree, tvb, msg, &megaco_ctx_ids ); } + while( tvb_transaction_end_offset < tvb_len - 2); if(global_megaco_raw_text){ tvb_raw_text_add(tvb, megaco_tree); @@ -3649,6 +3651,7 @@ static gint megaco_tvb_skip_wsp(tvbuff_t* tvb, gint offset ){ tempchar == '\t' || tempchar == '\n' || tempchar == '\r'); counter++); return (counter); } + static gint megaco_tvb_skip_wsp_return(tvbuff_t* tvb, gint offset){ gint counter = offset; gint end; @@ -3685,5 +3688,8 @@ static gint megaco_tvb_find_token(tvbuff_t* tvb, gint offset, gint maxlength){ if(counter<0) return -1; else - return pos; + { + pos = megaco_tvb_skip_wsp(tvb,pos+1); + return pos; + } } |