Add "rtp handle protection" inside srtp_add_address/rtp_add_address/bluetooth_add_address so dissectors calling it don't need to find "rtp" just for the handle check.

svn path=/trunk/; revision=53288
This commit is contained in:
Michael Mann 2013-11-12 22:04:03 +00:00
parent 99f0fc1d27
commit 7221215cdc
8 changed files with 58 additions and 75 deletions

View File

@ -60,7 +60,7 @@
#define PSNAME "H.245"
#define PFNAME "h245"
static dissector_handle_t rtp_handle=NULL;
static dissector_handle_t rtcp_handle=NULL;
static dissector_table_t nsp_object_dissector_table;
static dissector_table_t nsp_h221_dissector_table;
@ -370,7 +370,7 @@ static void h245_setup_channels(packet_info *pinfo, channel_info_t *upcoming_cha
/* DEBUG g_warning("h245_setup_channels media_addr.addr.type %u port %u",upcoming_channel_lcl->media_addr.addr.type, upcoming_channel_lcl->media_addr.port );
*/
if (upcoming_channel_lcl->media_addr.addr.type!=AT_NONE && upcoming_channel_lcl->media_addr.port!=0 && rtp_handle) {
if (upcoming_channel_lcl->media_addr.addr.type!=AT_NONE && upcoming_channel_lcl->media_addr.port!=0) {
srtp_add_address(pinfo, &upcoming_channel_lcl->media_addr.addr,
upcoming_channel_lcl->media_addr.port, 0,
"H245", pinfo->fd->num, upcoming_channel_lcl->is_video , rtp_dyn_payload, dummy_srtp_info);
@ -576,7 +576,6 @@ void proto_register_h245(void) {
void proto_reg_handoff_h245(void) {
dissector_handle_t h245_handle;
rtp_handle = find_dissector("rtp");
rtcp_handle = find_dissector("rtcp");
data_handle = find_dissector("data");
h263_handle = find_dissector("h263data");

View File

@ -720,7 +720,6 @@ static gint ett_vp_algs = -1;
static expert_field ei_ansi_a_extraneous_data = EI_INIT;
static char a_bigbuf[1024];
static dissector_handle_t rtp_handle=NULL;
static dissector_handle_t data_handle;
static dissector_handle_t dtap_handle;
static dissector_table_t is637_dissector_table; /* IS-637-A Transport Layer (SMS) */
@ -8419,8 +8418,7 @@ elem_a2p_bearer_format(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
proto_item_set_len(item, curr_offset - orig_offset);
if (rtp_handle &&
format_assigned &&
if (format_assigned &&
(first_assigned_found == FALSE))
{
key = wmem_new(wmem_file_scope(), gint);
@ -12413,7 +12411,6 @@ proto_reg_handoff_ansi_a(void)
dtap_handle = create_dissector_handle(dissect_dtap, proto_a_dtap);
sip_dtap_bsmap_handle = create_dissector_handle(dissect_sip_dtap_bsmap, proto_a_dtap);
data_handle = find_dissector("data");
rtp_handle = find_dissector("rtp");
dissector_add_uint("bsap.pdu_type", BSSAP_PDU_TYPE_BSMAP, bsmap_handle);
dissector_add_uint("bsap.pdu_type", BSSAP_PDU_TYPE_DTAP, dtap_handle);

View File

@ -664,7 +664,6 @@ static dissector_handle_t gsm_bsslap_handle = NULL;
static dissector_handle_t dtap_handle;
static dissector_handle_t bssgp_handle;
static dissector_handle_t rrc_handle;
static dissector_handle_t rtp_handle;
static proto_tree *g_tree;
static guint8 cell_discriminator = 0x0f; /* tracks whether handover is to UMTS */
@ -3871,7 +3870,7 @@ be_aoip_trans_lay_add(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, g
break;
}
if ((!pinfo->fd->flags.visited) && rtp_port != 0 && rtp_handle) {
if ((!pinfo->fd->flags.visited) && rtp_port != 0) {
rtp_add_address(pinfo, &rtp_dst_addr, rtp_port, 0, "BSS MAP", pinfo->fd->num, FALSE, 0);
rtcp_add_address(pinfo, &rtp_dst_addr, rtp_port+1, 0, "BSS MAP", pinfo->fd->num);
}
@ -8139,7 +8138,6 @@ proto_reg_handoff_gsm_a_bssmap(void)
gsm_bsslap_handle = find_dissector("gsm_bsslap");
bssgp_handle = find_dissector ("bssgp");
rrc_handle = find_dissector ("rrc");
rtp_handle = find_dissector("rtp");
}

View File

@ -68,7 +68,7 @@
#define PSNAME "H.245"
#define PFNAME "h245"
static dissector_handle_t rtp_handle=NULL;
static dissector_handle_t rtcp_handle=NULL;
static dissector_table_t nsp_object_dissector_table;
static dissector_table_t nsp_h221_dissector_table;
@ -501,7 +501,7 @@ static void h245_setup_channels(packet_info *pinfo, channel_info_t *upcoming_cha
/* DEBUG g_warning("h245_setup_channels media_addr.addr.type %u port %u",upcoming_channel_lcl->media_addr.addr.type, upcoming_channel_lcl->media_addr.port );
*/
if (upcoming_channel_lcl->media_addr.addr.type!=AT_NONE && upcoming_channel_lcl->media_addr.port!=0 && rtp_handle) {
if (upcoming_channel_lcl->media_addr.addr.type!=AT_NONE && upcoming_channel_lcl->media_addr.port!=0) {
srtp_add_address(pinfo, &upcoming_channel_lcl->media_addr.addr,
upcoming_channel_lcl->media_addr.port, 0,
"H245", pinfo->fd->num, upcoming_channel_lcl->is_video , rtp_dyn_payload, dummy_srtp_info);
@ -20777,7 +20777,6 @@ void proto_register_h245(void) {
void proto_reg_handoff_h245(void) {
dissector_handle_t h245_handle;
rtp_handle = find_dissector("rtp");
rtcp_handle = find_dissector("rtcp");
data_handle = find_dissector("data");
h263_handle = find_dissector("h263data");

View File

@ -829,7 +829,7 @@ bluetooth_add_address(packet_info *pinfo, address *addr,
* we've already done this work, so we don't need to do it
* again.
*/
if (pinfo->fd->flags.visited)
if ((pinfo->fd->flags.visited) || (rtp_handle == NULL))
{
return;
}
@ -913,7 +913,7 @@ srtp_add_address(packet_info *pinfo, address *addr, int port, int other_port,
* we've already done this work, so we don't need to do it
* again.
*/
if (pinfo->fd->flags.visited)
if ((pinfo->fd->flags.visited) || (rtp_handle == NULL))
{
return;
}

View File

@ -75,7 +75,6 @@
#include "packet-h264.h"
#include "packet-mp4ves.h"
static dissector_handle_t rtp_handle;
static dissector_handle_t rtcp_handle;
static dissector_handle_t sprt_handle;
static dissector_handle_t msrp_handle;
@ -1837,8 +1836,7 @@ setup_sdp_transport(tvbuff_t *tvb, packet_info *pinfo, enum sdp_exchange_type ex
if ((transport_info->media_port[n] != 0) &&
(transport_info->proto_bitmask[n] & (SDP_RTP_PROTO|SDP_SRTP_PROTO)) &&
(transport_info->proto_bitmask[n] & (SDP_IPv4|SDP_IPv6))) {
if (rtp_handle) {
if (transport_info->proto_bitmask[n] & SDP_SRTP_PROTO) {
if (transport_info->proto_bitmask[n] & SDP_SRTP_PROTO) {
srtp_info = wmem_new0(wmem_file_scope(), struct srtp_info);
if (transport_info->encryption_algorithm != SRTP_ENC_ALG_NOT_SET) {
srtp_info->encryption_algorithm = transport_info->encryption_algorithm;
@ -1850,15 +1848,15 @@ setup_sdp_transport(tvbuff_t *tvb, packet_info *pinfo, enum sdp_exchange_type ex
srtp_add_address(pinfo, &transport_info->src_addr[n], transport_info->media_port[n], 0, "SDP", pinfo->fd->num,
(transport_info->proto_bitmask[n] & SDP_VIDEO) ? TRUE : FALSE,
transport_info->media[n].rtp_dyn_payload, srtp_info);
} else {
} else {
rtp_add_address(pinfo, &transport_info->src_addr[n], transport_info->media_port[n], 0, "SDP", pinfo->fd->num,
(transport_info->proto_bitmask[n] & SDP_VIDEO) ? TRUE : FALSE,
transport_info->media[n].rtp_dyn_payload);
}
transport_info->media[n].set_rtp = TRUE;
/* SPRT might use the same port... */
current_rtp_port = transport_info->media_port[n];
}
transport_info->media[n].set_rtp = TRUE;
/* SPRT might use the same port... */
current_rtp_port = transport_info->media_port[n];
if (rtcp_handle) {
if (transport_info->proto_bitmask[n] & SDP_SRTP_PROTO) {
srtcp_add_address(pinfo, &transport_info->src_addr[n], transport_info->media_port[n]+1, 0, "SDP", pinfo->fd->num, srtp_info);
@ -2178,8 +2176,7 @@ dissect_sdp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
(transport_info->media_port[n] != 0) &&
(transport_info->proto_bitmask[n] & (SDP_RTP_PROTO|SDP_SRTP_PROTO)) &&
(transport_info->proto_bitmask[n] & (SDP_IPv4|SDP_IPv6))) {
if (rtp_handle) {
if (transport_info->proto_bitmask[n] & SDP_SRTP_PROTO) {
if (transport_info->proto_bitmask[n] & SDP_SRTP_PROTO) {
srtp_info = wmem_new0(wmem_file_scope(), struct srtp_info);
if (transport_info->encryption_algorithm != SRTP_ENC_ALG_NOT_SET) {
srtp_info->encryption_algorithm = transport_info->encryption_algorithm;
@ -2190,15 +2187,15 @@ dissect_sdp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
srtp_add_address(pinfo, &transport_info->src_addr[n], transport_info->media_port[n], 0, "SDP", pinfo->fd->num,
(transport_info->proto_bitmask[n] & SDP_VIDEO) ? TRUE : FALSE,
transport_info->media[n].rtp_dyn_payload, srtp_info);
} else {
} else {
rtp_add_address(pinfo, &transport_info->src_addr[n], transport_info->media_port[n], 0, "SDP", pinfo->fd->num,
(transport_info->proto_bitmask[n] & SDP_VIDEO) ? TRUE : FALSE,
transport_info->media[n].rtp_dyn_payload);
}
transport_info->media[n].set_rtp = TRUE;
/* SPRT might use the same port... */
current_rtp_port = transport_info->media_port[n];
}
transport_info->media[n].set_rtp = TRUE;
/* SPRT might use the same port... */
current_rtp_port = transport_info->media_port[n];
if (rtcp_handle) {
if (transport_info->proto_bitmask[n] & SDP_SRTP_PROTO) {
srtcp_add_address(pinfo, &transport_info->src_addr[n], transport_info->media_port[n]+1, 0, "SDP", pinfo->fd->num, srtp_info);
@ -2734,7 +2731,6 @@ proto_reg_handoff_sdp(void)
{
dissector_handle_t sdp_handle;
rtp_handle = find_dissector("rtp");
rtcp_handle = find_dissector("rtcp");
msrp_handle = find_dissector("msrp");
sprt_handle = find_dissector("sprt");

View File

@ -1374,8 +1374,6 @@ static gint ett_skinny_softKeyMap = -1;
/* desegmentation of SCCP */
static gboolean skinny_desegment = TRUE;
static dissector_handle_t rtp_handle=NULL;
/* tap register id */
static int skinny_tap = -1;
@ -1629,22 +1627,24 @@ dissect_skinny_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* da
case 0x0022: /* OpenReceiveChannelAck */
if (hdr_version == BASIC_MSG_TYPE) {
address src_addr;
guint32 ipv4_address;
proto_tree_add_item(skinny_tree, hf_skinny_ORCStatus, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
proto_tree_add_item(skinny_tree, hf_skinny_ipAddress, tvb, offset+16, 4, ENC_BIG_ENDIAN);
proto_tree_add_item(skinny_tree, hf_skinny_portNumber, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+24, 4, ENC_LITTLE_ENDIAN);
if (rtp_handle) {
address src_addr;
guint32 ipv4_address;
src_addr.type = AT_IPv4;
src_addr.len = 4;
src_addr.data = (guint8 *)&ipv4_address;
ipv4_address = tvb_get_ipv4(tvb, offset+16);
rtp_add_address(pinfo, &src_addr, tvb_get_letohl(tvb, offset+20), 0, "Skinny", pinfo->fd->num, is_video, NULL);
}
src_addr.type = AT_IPv4;
src_addr.len = 4;
src_addr.data = (guint8 *)&ipv4_address;
ipv4_address = tvb_get_ipv4(tvb, offset+16);
rtp_add_address(pinfo, &src_addr, tvb_get_letohl(tvb, offset+20), 0, "Skinny", pinfo->fd->num, is_video, NULL);
si->passThruId = tvb_get_letohl(tvb, offset+24);
} else if (hdr_version == CM7_MSG_TYPE_A || hdr_version == CM7_MSG_TYPE_B || hdr_version == CM7_MSG_TYPE_C || hdr_version == CM7_MSG_TYPE_D) {
address src_addr;
guint32 ipv4_address;
proto_tree_add_item(skinny_tree, hf_skinny_ORCStatus, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
/*Assume the field of next 4 bytes is IP Version*/
ipversion = tvb_get_ntohl(tvb, offset+16);
@ -1657,16 +1657,13 @@ dissect_skinny_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* da
}
proto_tree_add_item(skinny_tree, hf_skinny_portNumber, tvb, offset+36, 4, ENC_LITTLE_ENDIAN);
proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+40, 4, ENC_LITTLE_ENDIAN);
if (rtp_handle) {
address src_addr;
guint32 ipv4_address;
src_addr.type = AT_IPv4;
src_addr.len = 4;
src_addr.data = (guint8 *)&ipv4_address;
ipv4_address = tvb_get_ipv4(tvb, offset+20);
rtp_add_address(pinfo, &src_addr, tvb_get_letohl(tvb, offset+36), 0, "Skinny", pinfo->fd->num, is_video, NULL);
}
src_addr.type = AT_IPv4;
src_addr.len = 4;
src_addr.data = (guint8 *)&ipv4_address;
ipv4_address = tvb_get_ipv4(tvb, offset+20);
rtp_add_address(pinfo, &src_addr, tvb_get_letohl(tvb, offset+36), 0, "Skinny", pinfo->fd->num, is_video, NULL);
si->passThruId = tvb_get_letohl(tvb, offset+40);
}
break;
@ -2298,6 +2295,9 @@ dissect_skinny_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* da
case 0x008a: /* StartMediaTransmission */
if (hdr_version == BASIC_MSG_TYPE) {
address src_addr;
guint32 ipv4_address;
proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
proto_tree_add_item(skinny_tree, hf_skinny_remoteIpAddr, tvb, offset+20, 4, ENC_BIG_ENDIAN);
@ -2308,20 +2308,20 @@ dissect_skinny_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* da
proto_tree_add_item(skinny_tree, hf_skinny_silenceSuppression, tvb, offset+40, 4, ENC_LITTLE_ENDIAN);
proto_tree_add_item(skinny_tree, hf_skinny_maxFramesPerPacket, tvb, offset+44, 2, ENC_LITTLE_ENDIAN);
proto_tree_add_item(skinny_tree, hf_skinny_g723BitRate, tvb, offset+48, 4, ENC_LITTLE_ENDIAN);
if (rtp_handle) {
address src_addr;
guint32 ipv4_address;
src_addr.type = AT_IPv4;
src_addr.len = 4;
src_addr.data = (char *)&ipv4_address;
ipv4_address = tvb_get_ipv4(tvb, offset+20);
rtp_add_address(pinfo, &src_addr, tvb_get_letohl(tvb, offset+24), 0, "Skinny", pinfo->fd->num, is_video, NULL);
}
src_addr.type = AT_IPv4;
src_addr.len = 4;
src_addr.data = (char *)&ipv4_address;
ipv4_address = tvb_get_ipv4(tvb, offset+20);
rtp_add_address(pinfo, &src_addr, tvb_get_letohl(tvb, offset+24), 0, "Skinny", pinfo->fd->num, is_video, NULL);
si->passThruId = tvb_get_letohl(tvb, offset+16);
}
else if (hdr_version == CM7_MSG_TYPE_A || hdr_version == CM7_MSG_TYPE_B || hdr_version == CM7_MSG_TYPE_C || hdr_version == CM7_MSG_TYPE_D)
{
address src_addr;
guint32 ipv4_address;
proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
/*Assume the field of next 4 bytes is IP Version*/
@ -2344,16 +2344,13 @@ dissect_skinny_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* da
/* proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+66, 4, ENC_LITTLE_ENDIAN); */
/* proto_tree_add_item(skinny_tree, hf_skinny_rtpDTMFPayload, tvb, offset+126, 4, ENC_LITTLE_ENDIAN); */
/* proto_tree_add_item(skinny_tree, hf_skinny_rtptimeout, tvb, offset+130, 4, ENC_LITTLE_ENDIAN); */
if (rtp_handle) {
address src_addr;
guint32 ipv4_address;
src_addr.type = AT_IPv4;
src_addr.len = 4;
src_addr.data = (char *)&ipv4_address;
ipv4_address = tvb_get_ipv4(tvb, offset+24);
rtp_add_address(pinfo, &src_addr, tvb_get_letohl(tvb, offset+40), 0, "Skinny", pinfo->fd->num, is_video, NULL);
}
src_addr.type = AT_IPv4;
src_addr.len = 4;
src_addr.data = (char *)&ipv4_address;
ipv4_address = tvb_get_ipv4(tvb, offset+24);
rtp_add_address(pinfo, &src_addr, tvb_get_letohl(tvb, offset+40), 0, "Skinny", pinfo->fd->num, is_video, NULL);
si->passThruId = tvb_get_letohl(tvb, offset+16);
}
break;
@ -5379,7 +5376,6 @@ proto_reg_handoff_skinny(void)
dissector_handle_t skinny_handle;
if (!skinny_prefs_initialized) {
rtp_handle = find_dissector("rtp");
/* Skinny content type and internet media type used by other dissectors are the same */
media_type_dissector_table = find_dissector_table("media_type");
skinny_handle = new_create_dissector_handle(dissect_skinny, proto_skinny);

View File

@ -78,7 +78,6 @@ static dissector_handle_t uma_tcp_handle;
static dissector_handle_t uma_udp_handle;
static dissector_handle_t data_handle;
static dissector_table_t bssap_pdu_type_table;
static dissector_handle_t rtp_handle;
static dissector_handle_t rtcp_handle;
static dissector_handle_t llc_handle;
@ -1528,8 +1527,8 @@ dissect_uma_IE(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
proto_tree_add_item(urr_ie_tree, hf_uma_urr_RTP_port, tvb, ie_offset, 2, ENC_BIG_ENDIAN);
/* TODO find out exactly which element contains IP addr */
/* Debug
proto_tree_add_text(urr_ie_tree,tvb,ie_offset,ie_len,"IP %u, Port %u Handle %u",
rtp_ipv4_address,RTP_UDP_port,rtp_handle);
proto_tree_add_text(urr_ie_tree,tvb,ie_offset,ie_len,"IP %u, Port %u,
rtp_ipv4_address,RTP_UDP_port);
*/
if(unc_ipv4_address!=0){
SET_ADDRESS(&src_addr, AT_IPv4, 4, &unc_ipv4_address);
@ -1537,7 +1536,7 @@ dissect_uma_IE(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
/* Set Source IP = own IP */
src_addr = pinfo->src;
}
if((!pinfo->fd->flags.visited) && RTP_UDP_port!=0 && rtp_handle){
if((!pinfo->fd->flags.visited) && RTP_UDP_port!=0){
rtp_add_address(pinfo, &src_addr, RTP_UDP_port, 0, "UMA", pinfo->fd->num, FALSE, 0);
if ((RTP_UDP_port & 0x1) == 0){ /* Even number RTP port RTCP should follow on odd number */
@ -1758,7 +1757,6 @@ proto_reg_handoff_uma(void)
uma_udp_handle = find_dissector("umaudp");
dissector_add_handle("udp.port", uma_udp_handle); /* for "decode-as" */
data_handle = find_dissector("data");
rtp_handle = find_dissector("rtp");
rtcp_handle = find_dissector("rtcp");
llc_handle = find_dissector("llcgprs");
bssap_pdu_type_table = find_dissector_table("bssap.pdu_type");