diff options
author | Pascal Quantin <pascal.quantin@gmail.com> | 2015-06-26 10:33:11 -0700 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2015-06-26 21:57:45 +0000 |
commit | d6e53793ad3046dcfdc3ab28d08105b6df4ddf45 (patch) | |
tree | c509665925d5862b7951584ce1fc11d43e6af4a0 /epan | |
parent | 5c438e1e056cde9e56a774f21a93f5619222a0af (diff) |
RTP: create conversation when using heuristic dissector
This gives a chance to perform RTP reassembly when "Try to decode RTP outside of conversations"
option is activated.
Bug: 11310
Change-Id: Ic8bd9532a88a072c3cb1f1907cf7117b5072a954
Reviewed-on: https://code.wireshark.org/review/9175
Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan')
-rw-r--r-- | epan/dissectors/packet-rtp.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/epan/dissectors/packet-rtp.c b/epan/dissectors/packet-rtp.c index 1f8221d9c2..eedd95264b 100644 --- a/epan/dissectors/packet-rtp.c +++ b/epan/dissectors/packet-rtp.c @@ -1378,6 +1378,30 @@ dissect_rtp_heur_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, voi return FALSE; } + /* Create a conversation in case none exists so as to allow reassembly code to work */ + if (!find_conversation(pinfo->fd->num, &pinfo->net_dst, &pinfo->net_src, pinfo->ptype, + pinfo->destport, pinfo->srcport, NO_ADDR2)) { + conversation_t *p_conv; + struct _rtp_conversation_info *p_conv_data; + p_conv = conversation_new(pinfo->fd->num, &pinfo->net_dst, &pinfo->net_src, pinfo->ptype, + pinfo->destport, pinfo->srcport, NO_ADDR2); + p_conv_data = (struct _rtp_conversation_info *)conversation_get_proto_data(p_conv, proto_rtp); + if (! p_conv_data) { + /* Create conversation data */ + p_conv_data = wmem_new(wmem_file_scope(), struct _rtp_conversation_info); + p_conv_data->rtp_dyn_payload = NULL; + p_conv_data->extended_seqno = 0x10000; + p_conv_data->rtp_conv_info = wmem_new(wmem_file_scope(), rtp_private_conv_info); + p_conv_data->rtp_conv_info->multisegment_pdus = wmem_tree_new(wmem_file_scope()); + conversation_add_proto_data(p_conv, proto_rtp, p_conv_data); + } + g_strlcpy(p_conv_data->method, "HEUR RTP", MAX_RTP_SETUP_METHOD_SIZE+1); + p_conv_data->frame_number = pinfo->fd->num; + p_conv_data->is_video = FALSE; + p_conv_data->srtp_info = NULL; + p_conv_data->bta2dp_info = NULL; + p_conv_data->btvdp_info = NULL; + } dissect_rtp( tvb, pinfo, tree, data ); return TRUE; } |