summaryrefslogtreecommitdiff
path: root/epan
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2013-11-12 22:04:03 +0000
committerMichael Mann <mmann78@netscape.net>2013-11-12 22:04:03 +0000
commit7221215cdca74a587615e4e1ab9d79540bf58043 (patch)
tree89c8a8c9deae381fa127f3d18003f15b64d07e1e /epan
parent99f0fc1d27a64efe3dcaf6e012cf8dd5940a71be (diff)
downloadwireshark-7221215cdca74a587615e4e1ab9d79540bf58043.tar.gz
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
Diffstat (limited to 'epan')
-rw-r--r--epan/dissectors/packet-ansi_a.c5
-rw-r--r--epan/dissectors/packet-gsm_a_bssmap.c4
-rw-r--r--epan/dissectors/packet-h245.c5
-rw-r--r--epan/dissectors/packet-rtp.c4
-rw-r--r--epan/dissectors/packet-sdp.c28
-rw-r--r--epan/dissectors/packet-skinny.c82
-rw-r--r--epan/dissectors/packet-uma.c8
7 files changed, 60 insertions, 76 deletions
diff --git a/epan/dissectors/packet-ansi_a.c b/epan/dissectors/packet-ansi_a.c
index 3841b57278..379e90e0be 100644
--- a/epan/dissectors/packet-ansi_a.c
+++ b/epan/dissectors/packet-ansi_a.c
@@ -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);
diff --git a/epan/dissectors/packet-gsm_a_bssmap.c b/epan/dissectors/packet-gsm_a_bssmap.c
index e13b3db6d7..959b72e598 100644
--- a/epan/dissectors/packet-gsm_a_bssmap.c
+++ b/epan/dissectors/packet-gsm_a_bssmap.c
@@ -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");
}
diff --git a/epan/dissectors/packet-h245.c b/epan/dissectors/packet-h245.c
index 7193507286..1fa486709b 100644
--- a/epan/dissectors/packet-h245.c
+++ b/epan/dissectors/packet-h245.c
@@ -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");
diff --git a/epan/dissectors/packet-rtp.c b/epan/dissectors/packet-rtp.c
index e8adf5d89c..59cbae33f2 100644
--- a/epan/dissectors/packet-rtp.c
+++ b/epan/dissectors/packet-rtp.c
@@ -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;
}
diff --git a/epan/dissectors/packet-sdp.c b/epan/dissectors/packet-sdp.c
index ba08f5c592..25666a4ae4 100644
--- a/epan/dissectors/packet-sdp.c
+++ b/epan/dissectors/packet-sdp.c
@@ -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");
diff --git a/epan/dissectors/packet-skinny.c b/epan/dissectors/packet-skinny.c
index 5d36067a2d..acbb60ae4a 100644
--- a/epan/dissectors/packet-skinny.c
+++ b/epan/dissectors/packet-skinny.c
@@ -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);
diff --git a/epan/dissectors/packet-uma.c b/epan/dissectors/packet-uma.c
index a8006be187..44887ccc07 100644
--- a/epan/dissectors/packet-uma.c
+++ b/epan/dissectors/packet-uma.c
@@ -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");