summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--epan/dissectors/asn1/h245/packet-h245-template.c2
-rw-r--r--epan/dissectors/packet-ansi_a.c2
-rw-r--r--epan/dissectors/packet-applemidi.c2
-rw-r--r--epan/dissectors/packet-gsm_a_bssmap.c2
-rw-r--r--epan/dissectors/packet-h245.c2
-rw-r--r--epan/dissectors/packet-rsl.c2
-rw-r--r--epan/dissectors/packet-rtp.c69
-rw-r--r--epan/dissectors/packet-rtp.h2
-rw-r--r--epan/dissectors/packet-rtpproxy.c2
-rw-r--r--epan/dissectors/packet-rtsp.c2
-rw-r--r--epan/dissectors/packet-sdp.c4
-rw-r--r--epan/dissectors/packet-skinny.c4
-rw-r--r--epan/dissectors/packet-ua.c2
-rw-r--r--epan/dissectors/packet-uma.c2
-rw-r--r--epan/dissectors/packet-zrtp.c4
-rw-r--r--plugins/unistim/packet-unistim.c2
16 files changed, 77 insertions, 28 deletions
diff --git a/epan/dissectors/asn1/h245/packet-h245-template.c b/epan/dissectors/asn1/h245/packet-h245-template.c
index a8cad58d47..801b9d1126 100644
--- a/epan/dissectors/asn1/h245/packet-h245-template.c
+++ b/epan/dissectors/asn1/h245/packet-h245-template.c
@@ -371,7 +371,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) {
- srtp_add_address(pinfo, &upcoming_channel_lcl->media_addr.addr,
+ srtp_add_address(pinfo, PT_UDP, &upcoming_channel_lcl->media_addr.addr,
upcoming_channel_lcl->media_addr.port, 0,
"H245", pinfo->num, upcoming_channel_lcl->is_video , rtp_dyn_payload, dummy_srtp_info);
}
diff --git a/epan/dissectors/packet-ansi_a.c b/epan/dissectors/packet-ansi_a.c
index 5255721c20..bb5c62b1d6 100644
--- a/epan/dissectors/packet-ansi_a.c
+++ b/epan/dissectors/packet-ansi_a.c
@@ -6844,7 +6844,7 @@ elem_a2p_bearer_format(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guin
rtp_dyn_payload_used = TRUE;
first_assigned_found = TRUE;
- rtp_add_address(pinfo, &data_p->rtp_src_addr, data_p->rtp_port, 0, "IOS5",
+ rtp_add_address(pinfo, PT_UDP, &data_p->rtp_src_addr, data_p->rtp_port, 0, "IOS5",
pinfo->num, FALSE, rtp_dyn_payload);
}
diff --git a/epan/dissectors/packet-applemidi.c b/epan/dissectors/packet-applemidi.c
index 06fb9e80f7..7fccbbfc40 100644
--- a/epan/dissectors/packet-applemidi.c
+++ b/epan/dissectors/packet-applemidi.c
@@ -296,7 +296,7 @@ dissect_applemidi_heur( tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, voi
rtp_dyn_payload = rtp_dyn_payload_new();
rtp_dyn_payload_insert(rtp_dyn_payload, 97, "rtp-midi", 10000);
- rtp_add_address( pinfo, &pinfo->src, pinfo->srcport, 0, APPLEMIDI_DISSECTOR_SHORTNAME,
+ rtp_add_address( pinfo, PT_UDP, &pinfo->src, pinfo->srcport, 0, APPLEMIDI_DISSECTOR_SHORTNAME,
pinfo->num, FALSE, rtp_dyn_payload);
/* call dissect_applemidi() from now on for UDP packets on this "connection"
diff --git a/epan/dissectors/packet-gsm_a_bssmap.c b/epan/dissectors/packet-gsm_a_bssmap.c
index 962d4d977f..065eb7e520 100644
--- a/epan/dissectors/packet-gsm_a_bssmap.c
+++ b/epan/dissectors/packet-gsm_a_bssmap.c
@@ -3695,7 +3695,7 @@ be_aoip_trans_lay_add(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, g
}
if ((!pinfo->fd->flags.visited) && rtp_port != 0) {
- rtp_add_address(pinfo, &rtp_dst_addr, rtp_port, 0, "BSS MAP", pinfo->num, FALSE, 0);
+ rtp_add_address(pinfo, PT_UDP, &rtp_dst_addr, rtp_port, 0, "BSS MAP", pinfo->num, FALSE, 0);
rtcp_add_address(pinfo, &rtp_dst_addr, rtp_port+1, 0, "BSS MAP", pinfo->num);
}
return(curr_offset - offset);
diff --git a/epan/dissectors/packet-h245.c b/epan/dissectors/packet-h245.c
index 809414fb46..5b9f23a9cf 100644
--- a/epan/dissectors/packet-h245.c
+++ b/epan/dissectors/packet-h245.c
@@ -502,7 +502,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) {
- srtp_add_address(pinfo, &upcoming_channel_lcl->media_addr.addr,
+ srtp_add_address(pinfo, PT_UDP, &upcoming_channel_lcl->media_addr.addr,
upcoming_channel_lcl->media_addr.port, 0,
"H245", pinfo->num, upcoming_channel_lcl->is_video , rtp_dyn_payload, dummy_srtp_info);
}
diff --git a/epan/dissectors/packet-rsl.c b/epan/dissectors/packet-rsl.c
index 9c0246c957..b5d5702aa9 100644
--- a/epan/dissectors/packet-rsl.c
+++ b/epan/dissectors/packet-rsl.c
@@ -3200,7 +3200,7 @@ dissct_rsl_ipaccess_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int
}
conversation_delete_proto_data(conv, proto_rsl);
wmem_free(wmem_file_scope(), dyn_pl_info);
- rtp_add_address(pinfo, &src_addr, local_port, 0,
+ rtp_add_address(pinfo, PT_UDP, &src_addr, local_port, 0,
"GSM A-bis/IP", pinfo->num, 0, dyn_pl);
rtcp_add_address(pinfo, &src_addr, local_port+1, 0,
"GSM A-bis/IP", pinfo->num);
diff --git a/epan/dissectors/packet-rtp.c b/epan/dissectors/packet-rtp.c
index d9486a5ddf..4bec497f39 100644
--- a/epan/dissectors/packet-rtp.c
+++ b/epan/dissectors/packet-rtp.c
@@ -147,6 +147,7 @@ static const fragment_items rtp_fragment_items = {
};
static dissector_handle_t rtp_handle;
+static dissector_handle_t rtp_rfc4571_handle;
static dissector_handle_t rtcp_handle;
static dissector_handle_t classicstun_handle;
static dissector_handle_t stun_handle;
@@ -273,6 +274,9 @@ static int hf_rtp_ext_rfc5285_length = -1;
static int hf_rtp_ext_rfc5285_appbits = -1;
static int hf_rtp_ext_rfc5285_data = -1;
+/* RFC 4571 Header extension */
+static int hf_rfc4571_header_len = -1;
+
#define RTP0_INVALID 0
#define RTP0_STUN 1
#define RTP0_CLASSICSTUN 2
@@ -1235,7 +1239,7 @@ bluetooth_add_address(packet_info *pinfo, address *addr, guint32 stream_number,
/* Set up an SRTP conversation */
void
-srtp_add_address(packet_info *pinfo, address *addr, int port, int other_port,
+srtp_add_address(packet_info *pinfo, const port_type ptype, address *addr, int port, int other_port,
const gchar *setup_method, guint32 setup_frame_number,
gboolean is_video _U_, rtp_dyn_payload_t *rtp_dyn_payload,
struct srtp_info *srtp_info)
@@ -1249,13 +1253,13 @@ 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) || (rtp_handle == NULL))
+ if ((pinfo->fd->flags.visited) || (rtp_handle == NULL) || (rtp_rfc4571_handle == NULL))
{
return;
}
- DPRINT(("#%u: %srtp_add_address(%s, %u, %u, %s, %u)",
- pinfo->num, (srtp_info)?"s":"", address_to_str(wmem_packet_scope(), addr), port,
+ DPRINT(("#%u: %srtp_add_address(%d, %s, %u, %u, %s, %u)",
+ pinfo->num, (srtp_info)?"s":"", ptype, address_to_str(wmem_packet_scope(), addr), port,
other_port, setup_method, setup_frame_number));
DINDENT();
@@ -1265,7 +1269,7 @@ srtp_add_address(packet_info *pinfo, address *addr, int port, int other_port,
* Check if the ip address and port combination is not
* already registered as a conversation.
*/
- p_conv = find_conversation(setup_frame_number, addr, &null_addr, PT_UDP, port, other_port,
+ p_conv = find_conversation(setup_frame_number, addr, &null_addr, ptype, port, other_port,
NO_ADDR_B | (!other_port ? NO_PORT_B : 0));
DENDENT();
@@ -1275,13 +1279,19 @@ srtp_add_address(packet_info *pinfo, address *addr, int port, int other_port,
* If not, create a new conversation.
*/
if (!p_conv || p_conv->setup_frame != setup_frame_number) {
- p_conv = conversation_new(setup_frame_number, addr, &null_addr, PT_UDP,
+ p_conv = conversation_new(setup_frame_number, addr, &null_addr, ptype,
(guint32)port, (guint32)other_port,
NO_ADDR2 | (!other_port ? NO_PORT2 : 0));
}
/* Set dissector */
- conversation_set_dissector(p_conv, rtp_handle);
+ if (ptype == PT_UDP) {
+ conversation_set_dissector(p_conv, rtp_handle);
+ } else if (ptype == PT_TCP) {
+ conversation_set_dissector(p_conv, rtp_rfc4571_handle);
+ } else {
+ DISSECTOR_ASSERT(FALSE);
+ }
/*
* Check if the conversation has data associated with it.
@@ -1335,11 +1345,11 @@ srtp_add_address(packet_info *pinfo, address *addr, int port, int other_port,
/* Set up an RTP conversation */
void
-rtp_add_address(packet_info *pinfo, address *addr, int port, int other_port,
+rtp_add_address(packet_info *pinfo, const port_type ptype, address *addr, int port, int other_port,
const gchar *setup_method, guint32 setup_frame_number,
gboolean is_video , rtp_dyn_payload_t *rtp_dyn_payload)
{
- srtp_add_address(pinfo, addr, port, other_port, setup_method, setup_frame_number, is_video, rtp_dyn_payload, NULL);
+ srtp_add_address(pinfo, ptype, addr, port, other_port, setup_method, setup_frame_number, is_video, rtp_dyn_payload, NULL);
}
static gboolean
@@ -1749,8 +1759,6 @@ dissect_rtp_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
pinfo->desegment_len = 0;
}
-
-
static int
dissect_rtp_rfc2198(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
{
@@ -1840,6 +1848,30 @@ dissect_rtp_rfc2198(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* d
return tvb_captured_length(tvb);
}
+static int
+dissect_rtp_rfc4571(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
+{
+ gint offset = 0;
+ unsigned int packet_len;
+ unsigned int rtp_packet_len;
+ tvbuff_t *nexttvb;
+
+ packet_len = tvb_reported_length(tvb);
+ if ( packet_len < 2 )
+ return 0;
+
+ /* Is packet longer than length item */
+ rtp_packet_len = tvb_get_ntohs( tvb, offset );
+ if (packet_len != rtp_packet_len)
+ return 0;
+
+ proto_tree_add_uint( tree, hf_rfc4571_header_len, tvb, offset, 2, rtp_packet_len);
+ offset += 2;
+
+ nexttvb = tvb_new_subset_remaining( tvb, offset);
+ return dissect_rtp( nexttvb, pinfo, tree, data );
+}
+
static void
dissect_rtp_hext_rfc5285_onebyte( tvbuff_t *tvb, packet_info *pinfo,
proto_tree *rtp_hext_tree )
@@ -3552,6 +3584,18 @@ proto_register_rtp(void)
HFILL
}
},
+ {
+ &hf_rfc4571_header_len,
+ {
+ "RFC 4571 packet len",
+ "rtp.rfc4571.len",
+ FT_UINT16,
+ BASE_DEC,
+ NULL,
+ 0x0,
+ NULL, HFILL
+ }
+ },
/* reassembly stuff */
{&hf_rtp_fragments,
@@ -3667,6 +3711,7 @@ proto_register_rtp(void)
register_dissector("rtp", dissect_rtp, proto_rtp);
register_dissector("rtp.rfc2198", dissect_rtp_rfc2198, proto_rtp);
+ register_dissector("rtp.rfc4571", dissect_rtp_rfc4571, proto_rtp);
rtp_tap = register_tap("rtp");
@@ -3729,8 +3774,10 @@ proto_reg_handoff_rtp(void)
rtp_handle = find_dissector("rtp");
rtp_rfc2198_handle = find_dissector("rtp.rfc2198");
+ rtp_rfc4571_handle = find_dissector("rtp.rfc4571");
dissector_add_for_decode_as("udp.port", rtp_handle);
+ dissector_add_for_decode_as("tcp.port", rtp_rfc4571_handle);
dissector_add_string("rtp_dyn_payload_type", "red", rtp_rfc2198_handle);
heur_dissector_add( "udp", dissect_rtp_heur_udp, "RTP over UDP", "rtp_udp", proto_rtp, HEURISTIC_DISABLE);
heur_dissector_add("stun", dissect_rtp_heur_app, "RTP over TURN", "rtp_stun", proto_rtp, HEURISTIC_DISABLE);
diff --git a/epan/dissectors/packet-rtp.h b/epan/dissectors/packet-rtp.h
index 6513016e18..c14d0f2173 100644
--- a/epan/dissectors/packet-rtp.h
+++ b/epan/dissectors/packet-rtp.h
@@ -193,6 +193,7 @@ struct _rtp_conversation_info
/* Add an RTP conversation with the given details */
WS_DLL_PUBLIC
void rtp_add_address(packet_info *pinfo,
+ const port_type ptype,
address *addr, int port,
int other_port,
const gchar *setup_method,
@@ -203,6 +204,7 @@ void rtp_add_address(packet_info *pinfo,
/* Add an SRTP conversation with the given details */
WS_DLL_PUBLIC
void srtp_add_address(packet_info *pinfo,
+ const port_type ptype,
address *addr, int port,
int other_port,
const gchar *setup_method,
diff --git a/epan/dissectors/packet-rtpproxy.c b/epan/dissectors/packet-rtpproxy.c
index 7323afdf5a..5f249ca393 100644
--- a/epan/dissectors/packet-rtpproxy.c
+++ b/epan/dissectors/packet-rtpproxy.c
@@ -881,7 +881,7 @@ dissect_rtpproxy(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data
if (rtp_handle) {
/* FIXME tell if isn't a video stream, and setup codec mapping */
if (addr.len)
- rtp_add_address(pinfo, &addr, port, 0, "RTPproxy", pinfo->num, 0, NULL);
+ rtp_add_address(pinfo, PT_UDP, &addr, port, 0, "RTPproxy", pinfo->num, 0, NULL);
}
if (rtcp_handle) {
if (addr.len)
diff --git a/epan/dissectors/packet-rtsp.c b/epan/dissectors/packet-rtsp.c
index d4f95a8453..615009bb09 100644
--- a/epan/dissectors/packet-rtsp.c
+++ b/epan/dissectors/packet-rtsp.c
@@ -636,7 +636,7 @@ rtsp_create_conversation(packet_info *pinfo, proto_item *ti,
if (rtp_transport)
{
/* There is always data for RTP */
- rtp_add_address(pinfo, &pinfo->dst, c_data_port, s_data_port,
+ rtp_add_address(pinfo, PT_UDP, &pinfo->dst, c_data_port, s_data_port,
"RTSP", pinfo->num, is_video, NULL);
/* RTCP only if indicated */
diff --git a/epan/dissectors/packet-sdp.c b/epan/dissectors/packet-sdp.c
index 3436741ea4..3c22b45de2 100644
--- a/epan/dissectors/packet-sdp.c
+++ b/epan/dissectors/packet-sdp.c
@@ -2141,7 +2141,7 @@ apply_sdp_transport(packet_info *pinfo, transport_info_t *transport_info, int re
DINDENT();
/* srtp_add_address and rtp_add_address are given the request_frame's not this frame's number,
because that's where the RTP flow started, and thus conversation needs to check against */
- srtp_add_address(pinfo, &media_desc->conn_addr, media_desc->media_port, 0, "SDP", establish_frame,
+ srtp_add_address(pinfo, PT_UDP, &media_desc->conn_addr, media_desc->media_port, 0, "SDP", establish_frame,
media_desc->is_video,
media_desc->media.rtp_dyn_payload, srtp_info);
DENDENT();
@@ -2149,7 +2149,7 @@ apply_sdp_transport(packet_info *pinfo, transport_info_t *transport_info, int re
DPRINT(("calling rtp_add_address, channel=%d, media_port=%d",
i, media_desc->media_port));
DINDENT();
- rtp_add_address(pinfo, &media_desc->conn_addr, media_desc->media_port, 0, "SDP", establish_frame,
+ rtp_add_address(pinfo, PT_UDP, &media_desc->conn_addr, media_desc->media_port, 0, "SDP", establish_frame,
media_desc->is_video,
media_desc->media.rtp_dyn_payload);
DENDENT();
diff --git a/epan/dissectors/packet-skinny.c b/epan/dissectors/packet-skinny.c
index 2692fbe651..6334b13267 100644
--- a/epan/dissectors/packet-skinny.c
+++ b/epan/dissectors/packet-skinny.c
@@ -2271,7 +2271,7 @@ dissect_skinny_ipv4or6(ptvcursor_t *cursor, int hfindex_ipv4, int hfindex_ipv6,
src_addr.len = 4;
src_addr.data = (guint8 *)&ip_address;
ip_address = tvb_get_ipv4(tvb, offset);
- rtp_add_address(pinfo, &src_addr, tvb_get_letohl(tvb, offset), 0, "Skinny", pinfo->num, is_video, NULL);
+ rtp_add_address(pinfo, PT_UDP, &src_addr, tvb_get_letohl(tvb, offset), 0, "Skinny", pinfo->num, is_video, NULL);
ptvcursor_add(cursor, hfindex_ipv4, 4, ENC_BIG_ENDIAN);
if (hdr_version >= V17_MSG_TYPE) {
/* skip over the extra room for ipv6 addresses */
@@ -2283,7 +2283,7 @@ dissect_skinny_ipv4or6(ptvcursor_t *cursor, int hfindex_ipv4, int hfindex_ipv6,
src_addr.len = 16;
src_addr.data = (guint8 *)&IPv6;
tvb_get_ipv6(tvb, offset, &IPv6);
- rtp_add_address(pinfo, &src_addr, tvb_get_letohl(tvb, offset), 0, "Skinny", pinfo->num, is_video, NULL);
+ rtp_add_address(pinfo, PT_UDP, &src_addr, tvb_get_letohl(tvb, offset), 0, "Skinny", pinfo->num, is_video, NULL);
ptvcursor_add(cursor, hfindex_ipv6, 16, ENC_NA);
} else {
/* Invalid : skip over ipv6 space completely */
diff --git a/epan/dissectors/packet-ua.c b/epan/dissectors/packet-ua.c
index 9a89e0c42c..0e8544e5f4 100644
--- a/epan/dissectors/packet-ua.c
+++ b/epan/dissectors/packet-ua.c
@@ -224,7 +224,7 @@ static void _dissect_ua_msg(tvbuff_t *tvb,
if ((remote_rtp_addr.data != NULL) && (remote_rtp_port != 0))
{
- rtp_add_address(pinfo, &remote_rtp_addr, remote_rtp_port, 0,
+ rtp_add_address(pinfo, PT_UDP, &remote_rtp_addr, remote_rtp_port, 0,
"UA", pinfo->num, 0, NULL);
rtcp_add_address(pinfo, &remote_rtp_addr, remote_rtp_port+1, 0,
"UA", pinfo->num);
diff --git a/epan/dissectors/packet-uma.c b/epan/dissectors/packet-uma.c
index d1023e2f6f..95cc991e20 100644
--- a/epan/dissectors/packet-uma.c
+++ b/epan/dissectors/packet-uma.c
@@ -1539,7 +1539,7 @@ dissect_uma_IE(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
}
if((!pinfo->fd->flags.visited) && RTP_UDP_port!=0){
- rtp_add_address(pinfo, &src_addr, RTP_UDP_port, 0, "UMA", pinfo->num, FALSE, 0);
+ rtp_add_address(pinfo, PT_UDP, &src_addr, RTP_UDP_port, 0, "UMA", pinfo->num, FALSE, 0);
if ((RTP_UDP_port & 0x1) == 0){ /* Even number RTP port RTCP should follow on odd number */
RTCP_UDP_port = RTP_UDP_port + 1;
rtcp_add_address(pinfo, &src_addr, RTCP_UDP_port, 0, "UMA", pinfo->num);
diff --git a/epan/dissectors/packet-zrtp.c b/epan/dissectors/packet-zrtp.c
index 5ae2194a77..85fcfa2605 100644
--- a/epan/dissectors/packet-zrtp.c
+++ b/epan/dissectors/packet-zrtp.c
@@ -452,10 +452,10 @@ dissect_Conf2ACK(packet_info *pinfo) {
dummy_srtp_info->mki_len = 0;
dummy_srtp_info->auth_tag_len = 4;
- srtp_add_address(pinfo, &pinfo->net_src, pinfo->srcport, pinfo->destport,
+ srtp_add_address(pinfo, PT_UDP, &pinfo->net_src, pinfo->srcport, pinfo->destport,
"ZRTP", pinfo->num, FALSE, NULL, dummy_srtp_info);
- srtp_add_address(pinfo, &pinfo->net_dst, pinfo->destport, pinfo->srcport,
+ srtp_add_address(pinfo, PT_UDP, &pinfo->net_dst, pinfo->destport, pinfo->srcport,
"ZRTP", pinfo->num, FALSE, NULL, dummy_srtp_info);
srtcp_add_address(pinfo, &pinfo->net_src, pinfo->srcport+1, pinfo->destport+1,
diff --git a/plugins/unistim/packet-unistim.c b/plugins/unistim/packet-unistim.c
index 1db183f081..6e39d7fd5e 100644
--- a/plugins/unistim/packet-unistim.c
+++ b/plugins/unistim/packet-unistim.c
@@ -2310,7 +2310,7 @@ dissect_audio_switch(proto_tree *msg_tree,packet_info *pinfo,
set_address(&far_addr, AT_IPv4, 4, &far_ip_addr);
far_port = tvb_get_ntohs(tvb, offset-8);
- rtp_add_address(pinfo, &far_addr, far_port, 0, "UNISTIM", pinfo->num, FALSE, NULL);
+ rtp_add_address(pinfo, PT_UDP, &far_addr, far_port, 0, "UNISTIM", pinfo->num, FALSE, NULL);
far_port = tvb_get_ntohs(tvb, offset-6);
rtcp_add_address(pinfo, &far_addr, far_port, 0, "UNISTIM", pinfo->num);