Few bugfixes and enhancements
- Updated RTPproxy dissector (again) - Allow packets more than 64k (for USB capture). See patch no. 13 - Don't die during loading of some SIP capture files. See patch no. 14 - Backport support for RTPproxy dissector timeouts detection. See patch no. 15 Signed-off-by: Peter Lemenkov <lemenkov@gmail.com>
This commit is contained in:
parent
1738882448
commit
65d033ba77
@ -1,4 +1,3 @@
|
||||
From 9d38601b45c6bce770946ac3c36a675a2f1a4359 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Radek=20Vok=C3=A1l?= <rvokal@fedoraproject.org>
|
||||
Date: Tue, 15 Dec 2009 08:36:27 +0000
|
||||
Subject: [PATCH] enable Lua support
|
||||
|
@ -1,4 +1,3 @@
|
||||
From d7b9380cb2b827fb627f82a1c3b73496b089b8dd Mon Sep 17 00:00:00 2001
|
||||
From: Jan Safranek <jsafrane@redhat.com>
|
||||
Date: Fri, 26 Nov 2010 14:30:45 +0300
|
||||
Subject: [PATCH] Customize 'permission denied' error.
|
||||
|
@ -1,4 +1,3 @@
|
||||
From 0d0f937fcbb73fb36a44bd7061817ff1cdac0032 Mon Sep 17 00:00:00 2001
|
||||
From: Jan Safranek <jsafrane@redhat.com>
|
||||
Date: Thu, 9 Jun 2011 14:56:59 +0200
|
||||
Subject: [PATCH] Load correct shared object name in python.
|
||||
|
@ -1,4 +1,3 @@
|
||||
From 8e34a9a261f26ceabc39ea373d9025a24805b832 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Hatina <phatina@redhat.com>
|
||||
Date: Mon, 8 Apr 2013 13:03:24 +0200
|
||||
Subject: [PATCH] fix documentation build error
|
||||
|
@ -1,4 +1,3 @@
|
||||
From dfd843cda67cfd9b785b44f5096a185c04c08be8 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Hatina <phatina@redhat.com>
|
||||
Date: Wed, 4 Sep 2013 10:03:57 +0200
|
||||
Subject: [PATCH] fix string overrun in plugins/profinet
|
||||
|
@ -1,4 +1,3 @@
|
||||
From 1b67a9195503e6f22429a46e98def1dd31a05451 Mon Sep 17 00:00:00 2001
|
||||
From: Evan Huus <eapache@gmail.com>
|
||||
Date: Sun, 18 Aug 2013 19:49:08 +0000
|
||||
Subject: [PATCH] From Peter Lemenkov via
|
||||
@ -79,6 +78,57 @@ replace proto_tree_add_string_format_value() with proto_tree_add_item()
|
||||
|
||||
svn path=/trunk/; revision=53261
|
||||
|
||||
From Peter Lemenkov via https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9429 :
|
||||
Fix Notify info parsing in RTPproxy dissector
|
||||
|
||||
svn path=/trunk/; revision=53385
|
||||
|
||||
From Peter Lemenkov via https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9430 :
|
||||
Fix empty ToTag in RTPproxy's Offer/Update command
|
||||
|
||||
svn path=/trunk/; revision=53391
|
||||
|
||||
From Peter Lemenkov via https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9440 :
|
||||
RTPproxy: use proto_item_append_text instead of rewriting the entire item's text
|
||||
|
||||
svn path=/trunk/; revision=53393
|
||||
|
||||
From Peter Lemenkov via https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9441 :
|
||||
Fix Notify IPv6 address parsing in RTPproxy dissector
|
||||
|
||||
svn path=/trunk/; revision=53394
|
||||
|
||||
add a cast to fix compiler warning
|
||||
|
||||
svn path=/trunk/; revision=53401
|
||||
|
||||
Fix typo errors
|
||||
|
||||
svn path=/trunk/; revision=53585
|
||||
|
||||
From Peter Lemenkov via https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9397 :
|
||||
Add RTP/RTCP dissector setup based on the replies found in rtpproxy dissector
|
||||
|
||||
svn path=/trunk/; revision=53603
|
||||
|
||||
From Peter Lemenkov via https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9444 :
|
||||
Add initial parameter parser for commands in RTPproxy dissector
|
||||
|
||||
svn path=/trunk/; revision=53604
|
||||
|
||||
From Peter Lemenkov via https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9476 :
|
||||
Add DTMF dissector setup based on the information found in RTPproxy requests
|
||||
|
||||
svn path=/trunk/; revision=53605
|
||||
|
||||
Squelch a compiler warning.
|
||||
|
||||
svn path=/trunk/; revision=53606
|
||||
|
||||
Reinitialize counter between loops to avoid an out of bound access found with fuzz testing.
|
||||
|
||||
svn path=/trunk/; revision=53612
|
||||
|
||||
diff --git a/AUTHORS b/AUTHORS
|
||||
index 10782b0..e7b3c18 100644
|
||||
--- a/AUTHORS
|
||||
@ -117,10 +167,10 @@ index 937f522..73217d7 100644
|
||||
packet-rudp.c \
|
||||
diff --git a/epan/dissectors/packet-rtpproxy.c b/epan/dissectors/packet-rtpproxy.c
|
||||
new file mode 100644
|
||||
index 0000000..f606abb
|
||||
index 0000000..831448b
|
||||
--- /dev/null
|
||||
+++ b/epan/dissectors/packet-rtpproxy.c
|
||||
@@ -0,0 +1,959 @@
|
||||
@@ -0,0 +1,1350 @@
|
||||
+/* packet-rtpproxy.c
|
||||
+ * RTPproxy command protocol dissector
|
||||
+ * Copyright 2013, Peter Lemenkov <lemenkov@gmail.com>
|
||||
@ -154,11 +204,27 @@ index 0000000..f606abb
|
||||
+#include "config.h"
|
||||
+
|
||||
+#include <ctype.h>
|
||||
+#include <glib.h>
|
||||
+
|
||||
+#include <epan/address.h>
|
||||
+#include <epan/packet.h>
|
||||
+#include <epan/prefs.h>
|
||||
+#include <epan/conversation.h>
|
||||
+
|
||||
+#ifdef HAVE_ARPA_INET_H
|
||||
+#include <arpa/inet.h>
|
||||
+#endif
|
||||
+#ifdef HAVE_WINSOCK2_H
|
||||
+#include <winsock2.h> /* needed to define AF_ values on Windows */
|
||||
+#endif
|
||||
+#ifdef NEED_INET_V6DEFS_H
|
||||
+#include "wsutil/inet_v6defs.h"
|
||||
+#endif
|
||||
+
|
||||
+/* For setting up RTP/RTCP dissectors based on the RTPproxy's answers */
|
||||
+#include "packet-rtp.h"
|
||||
+#include "packet-rtcp.h"
|
||||
+
|
||||
+static int proto_rtpproxy = -1;
|
||||
+
|
||||
+static int hf_rtpproxy_cookie = -1;
|
||||
@ -172,12 +238,23 @@ index 0000000..f606abb
|
||||
+static int hf_rtpproxy_request = -1;
|
||||
+static int hf_rtpproxy_command = -1;
|
||||
+static int hf_rtpproxy_command_parameters = -1;
|
||||
+static int hf_rtpproxy_command_parameter = -1;
|
||||
+static int hf_rtpproxy_command_parameter_codec = -1;
|
||||
+static int hf_rtpproxy_command_parameter_local = -1;
|
||||
+static int hf_rtpproxy_command_parameter_remote = -1;
|
||||
+static int hf_rtpproxy_command_parameter_repacketize = -1;
|
||||
+static int hf_rtpproxy_command_parameter_dtmf = -1;
|
||||
+/* static int hf_rtpproxy_command_parameter_cmap = -1; TODO */
|
||||
+static int hf_rtpproxy_command_parameter_proto = -1;
|
||||
+static int hf_rtpproxy_command_parameter_transcode = -1;
|
||||
+static int hf_rtpproxy_command_parameter_acc = -1;
|
||||
+static int hf_rtpproxy_callid = -1;
|
||||
+static int hf_rtpproxy_copy_target = -1;
|
||||
+static int hf_rtpproxy_playback_filename = -1;
|
||||
+static int hf_rtpproxy_playback_codec = -1;
|
||||
+static int hf_rtpproxy_notify = -1;
|
||||
+static int hf_rtpproxy_notify_ipv4 = -1;
|
||||
+static int hf_rtpproxy_notify_ipv6 = -1;
|
||||
+static int hf_rtpproxy_notify_port = -1;
|
||||
+static int hf_rtpproxy_notify_tag = -1;
|
||||
+static int hf_rtpproxy_tag = -1;
|
||||
@ -197,6 +274,10 @@ index 0000000..f606abb
|
||||
+ nstime_t req_time;
|
||||
+} rtpproxy_info_t;
|
||||
+
|
||||
+static dissector_handle_t rtcp_handle;
|
||||
+static dissector_handle_t rtp_events_handle;
|
||||
+static dissector_handle_t rtp_handle;
|
||||
+
|
||||
+typedef struct _rtpproxy_conv_info {
|
||||
+ emem_tree_t *trans;
|
||||
+} rtpproxy_conv_info_t;
|
||||
@ -241,6 +322,57 @@ index 0000000..f606abb
|
||||
+ { 0, NULL }
|
||||
+};
|
||||
+
|
||||
+static const value_string paramtypenames[] = {
|
||||
+ /* Official command parameters */
|
||||
+ {'4', "Remote address is IPv4"},
|
||||
+ {'6', "Remote address is IPv6"},
|
||||
+ {'a', "Asymmetric RTP"},
|
||||
+ {'A', "Asymmetric RTP"},
|
||||
+ {'b', "Brief stats"},
|
||||
+ {'B', "Brief stats"},
|
||||
+ {'c', "Codecs"},
|
||||
+ {'C', "Codecs"},
|
||||
+ {'e', "External network (non RFC 1918)"},
|
||||
+ {'E', "External network (non RFC 1918)"},
|
||||
+ {'i', "Internal network (RFC 1918)"},
|
||||
+ {'I', "Internal network (RFC 1918)"},
|
||||
+ {'l', "Local address"},
|
||||
+ {'L', "Local address"},
|
||||
+ {'r', "Remote address"},
|
||||
+ {'R', "Remote address"},
|
||||
+ {'s', "Symmetric RTP (default)"},
|
||||
+ {'S', "Symmetric RTP (default)"},
|
||||
+ {'w', "Weak connection (allows roaming)"},
|
||||
+ {'W', "Weak connection (allows roaming)"},
|
||||
+ {'z', "repacketiZe"},
|
||||
+ {'Z', "repacketiZe"},
|
||||
+ /* Unofficial command parameters / expensions */
|
||||
+ {'d', "DTMF payload ID (unofficial extension)"},
|
||||
+ {'D', "DTMF payload ID (unofficial extension)"},
|
||||
+ {'m', "codec Mapping (unofficial extension)"},
|
||||
+ {'M', "codec Mapping (unofficial extension)"},
|
||||
+ {'p', "Protocol type (unofficial extension)"},
|
||||
+ {'P', "Protocol type (unofficial extension)"},
|
||||
+ {'t', "Transcode to (unofficial extension)"},
|
||||
+ {'T', "Transcode to (unofficial extension)"},
|
||||
+ {'v', "Accounting (unofficial extension)"},
|
||||
+ {'V', "Accounting (unofficial extension)"},
|
||||
+ {0, NULL}
|
||||
+};
|
||||
+
|
||||
+static const value_string prototypenames[] = {
|
||||
+ { '0', "UDP (default)"},
|
||||
+ { '1', "TCP"},
|
||||
+ { '2', "SCTP"},
|
||||
+ { 0, NULL }
|
||||
+};
|
||||
+static const value_string acctypenames[] = {
|
||||
+ { '0', "Start"},
|
||||
+ { '1', "Interim update"},
|
||||
+ { '2', "Stop"},
|
||||
+ { 0, NULL }
|
||||
+};
|
||||
+
|
||||
+static const value_string oktypenames[] = {
|
||||
+ { '0', "Ok"},
|
||||
+ { '1', "Version Supported"},
|
||||
@ -274,6 +406,16 @@ index 0000000..f606abb
|
||||
+
|
||||
+static gint ett_rtpproxy_request = -1;
|
||||
+static gint ett_rtpproxy_command = -1;
|
||||
+static gint ett_rtpproxy_command_parameters = -1;
|
||||
+static gint ett_rtpproxy_command_parameters_codecs = -1;
|
||||
+static gint ett_rtpproxy_command_parameters_local = -1;
|
||||
+static gint ett_rtpproxy_command_parameters_remote = -1;
|
||||
+static gint ett_rtpproxy_command_parameters_repacketize = -1;
|
||||
+static gint ett_rtpproxy_command_parameters_dtmf = -1;
|
||||
+static gint ett_rtpproxy_command_parameters_cmap = -1;
|
||||
+static gint ett_rtpproxy_command_parameters_proto = -1;
|
||||
+static gint ett_rtpproxy_command_parameters_transcode = -1;
|
||||
+static gint ett_rtpproxy_command_parameters_acc = -1;
|
||||
+static gint ett_rtpproxy_tag = -1;
|
||||
+static gint ett_rtpproxy_notify = -1;
|
||||
+
|
||||
@ -281,11 +423,12 @@ index 0000000..f606abb
|
||||
+
|
||||
+static guint rtpproxy_tcp_port = 22222;
|
||||
+static guint rtpproxy_udp_port = 22222;
|
||||
+static gboolean rtpproxy_establish_conversation = TRUE;
|
||||
+
|
||||
+void proto_reg_handoff_rtpproxy(void);
|
||||
+
|
||||
+gint
|
||||
+rtpptoxy_add_tag(proto_tree *rtpproxy_tree, tvbuff_t *tvb, guint begin, guint realsize)
|
||||
+rtpproxy_add_tag(proto_tree *rtpproxy_tree, tvbuff_t *tvb, guint begin, guint realsize)
|
||||
+{
|
||||
+ proto_item *ti = NULL;
|
||||
+ proto_tree *another_tree = NULL;
|
||||
@ -306,10 +449,12 @@ index 0000000..f606abb
|
||||
+ ti = proto_tree_add_item(rtpproxy_tree, hf_rtpproxy_tag, tvb, begin, end - begin, ENC_ASCII | ENC_NA);
|
||||
+ another_tree = proto_item_add_subtree(ti, ett_rtpproxy_tag);
|
||||
+ ti = proto_tree_add_item(another_tree, hf_rtpproxy_mediaid, tvb, new_offset+1, 0, ENC_ASCII | ENC_NA);
|
||||
+ proto_item_set_text(ti, "Media-ID: <skipped>");
|
||||
+ proto_item_append_text(ti, "<skipped>");
|
||||
+ }
|
||||
+ else{
|
||||
+ ti = proto_tree_add_item(rtpproxy_tree, hf_rtpproxy_tag, tvb, begin, new_offset - begin, ENC_ASCII | ENC_NA);
|
||||
+ if ((guint)new_offset == begin)
|
||||
+ proto_item_append_text(ti, "<skipped>"); /* A very first Offer/Update command */
|
||||
+ another_tree = proto_item_add_subtree(ti, ett_rtpproxy_tag);
|
||||
+ proto_tree_add_item(another_tree, hf_rtpproxy_mediaid, tvb, new_offset+1, end - (new_offset+1), ENC_ASCII | ENC_NA);
|
||||
+ }
|
||||
@ -317,6 +462,101 @@ index 0000000..f606abb
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+rtpproxy_add_parameter(proto_tree *rtpproxy_tree, tvbuff_t *tvb, guint begin, guint realsize)
|
||||
+{
|
||||
+ proto_item *ti;
|
||||
+ proto_tree *another_tree = NULL;
|
||||
+ guint offset = 0;
|
||||
+ guint new_offset = 0;
|
||||
+ gint i;
|
||||
+ guint pt = 0;
|
||||
+ gchar** codecs = NULL;
|
||||
+ guint codec_len;
|
||||
+ guint8* rawstr = NULL;
|
||||
+
|
||||
+ /* Extract the entire parameters line. */
|
||||
+ /* Something like "t4p1iic8,0,2,4,18,96,97,98,100,101" */
|
||||
+ rawstr = tvb_get_ephemeral_string(tvb, begin, realsize);
|
||||
+
|
||||
+ while(offset < realsize){
|
||||
+ ti = proto_tree_add_item(rtpproxy_tree, hf_rtpproxy_command_parameter, tvb, begin + offset, 1, ENC_NA);
|
||||
+ offset++; /* Skip 1-byte parameter's type */
|
||||
+ switch (g_ascii_tolower(tvb_get_guint8(tvb, begin+offset-1)))
|
||||
+ {
|
||||
+ /* Official long parameters */
|
||||
+ case 'c':
|
||||
+ new_offset = (gint)strspn(rawstr+offset, "0123456789,");
|
||||
+ another_tree = proto_item_add_subtree(ti, ett_rtpproxy_command_parameters_codecs);
|
||||
+ codecs = g_strsplit(tvb_get_ephemeral_string(tvb, begin+offset, new_offset), ",", 0);
|
||||
+ i = 0;
|
||||
+ while(codecs[i]){
|
||||
+ /* We assume strings < 2^32-1 bytes long. :-) */
|
||||
+ codec_len = (guint)strlen(codecs[i]);
|
||||
+ proto_tree_add_item(another_tree, hf_rtpproxy_command_parameter_codec, tvb, begin+offset, codec_len, ENC_ASCII | ENC_NA);
|
||||
+ offset += codec_len;
|
||||
+ if(codecs[i+1])
|
||||
+ offset++; /* skip comma */
|
||||
+ i++;
|
||||
+ };
|
||||
+ g_strfreev(codecs);
|
||||
+ break;
|
||||
+ case 'l':
|
||||
+ new_offset = (gint)strspn(rawstr+offset, "0123456789.");
|
||||
+ another_tree = proto_item_add_subtree(ti, ett_rtpproxy_command_parameters_local);
|
||||
+ proto_tree_add_item(another_tree, hf_rtpproxy_command_parameter_local, tvb, begin+offset, new_offset, ENC_ASCII | ENC_NA);
|
||||
+ offset += new_offset;
|
||||
+ break;
|
||||
+ case 'r':
|
||||
+ new_offset = (gint)strspn(rawstr+offset, "0123456789.");
|
||||
+ another_tree = proto_item_add_subtree(ti, ett_rtpproxy_command_parameters_remote);
|
||||
+ proto_tree_add_item(another_tree, hf_rtpproxy_command_parameter_remote, tvb, begin+offset, new_offset, ENC_ASCII | ENC_NA);
|
||||
+ offset += new_offset;
|
||||
+ break;
|
||||
+ case 'z':
|
||||
+ new_offset = (gint)strspn(rawstr+offset, "0123456789");
|
||||
+ another_tree = proto_item_add_subtree(ti, ett_rtpproxy_command_parameters_repacketize);
|
||||
+ proto_tree_add_item(another_tree, hf_rtpproxy_command_parameter_repacketize, tvb, begin+offset, new_offset, ENC_ASCII | ENC_NA);
|
||||
+ offset += new_offset;
|
||||
+ break;
|
||||
+ /* Unofficial long parameters */
|
||||
+ case 'd':
|
||||
+ new_offset = (gint)strspn(rawstr+offset, "0123456789");
|
||||
+ another_tree = proto_item_add_subtree(ti, ett_rtpproxy_command_parameters_dtmf);
|
||||
+ proto_tree_add_item(another_tree, hf_rtpproxy_command_parameter_dtmf, tvb, begin+offset, new_offset, ENC_ASCII | ENC_NA);
|
||||
+ if(rtpproxy_establish_conversation){
|
||||
+ pt = (guint)strtoul(tvb_format_text(tvb,begin+offset,new_offset),NULL,10);
|
||||
+ dissector_add_uint("rtp.pt", pt, rtp_events_handle);
|
||||
+ }
|
||||
+ offset += new_offset;
|
||||
+ break;
|
||||
+ case 'm':
|
||||
+ new_offset = (gint)strspn(rawstr+offset, "0123456789=,");
|
||||
+ /* TODO */
|
||||
+ offset += new_offset;
|
||||
+ break;
|
||||
+ case 'p':
|
||||
+ another_tree = proto_item_add_subtree(ti, ett_rtpproxy_command_parameters_proto);
|
||||
+ proto_tree_add_item(another_tree, hf_rtpproxy_command_parameter_proto, tvb, begin+offset, 1, ENC_NA);
|
||||
+ offset++;
|
||||
+ break;
|
||||
+ case 't':
|
||||
+ new_offset = (gint)strspn(rawstr+offset, "0123456789");
|
||||
+ another_tree = proto_item_add_subtree(ti, ett_rtpproxy_command_parameters_transcode);
|
||||
+ proto_tree_add_item(another_tree, hf_rtpproxy_command_parameter_transcode, tvb, begin+offset, new_offset, ENC_ASCII | ENC_NA);
|
||||
+ offset += new_offset;
|
||||
+ break;
|
||||
+ case 'v':
|
||||
+ another_tree = proto_item_add_subtree(ti, ett_rtpproxy_command_parameters_acc);
|
||||
+ proto_tree_add_item(another_tree, hf_rtpproxy_command_parameter_acc, tvb, begin+offset, 1, ENC_NA);
|
||||
+ offset++;
|
||||
+ break;
|
||||
+ default:
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+rtpproxy_add_tid(gboolean is_request, tvbuff_t *tvb, packet_info *pinfo, proto_tree *rtpproxy_tree, rtpproxy_conv_info_t *rtpproxy_conv, gchar* cookie)
|
||||
+{
|
||||
+ rtpproxy_info_t *rtpproxy_info;
|
||||
@ -353,6 +593,37 @@ index 0000000..f606abb
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+rtpproxy_add_notify_addr(proto_tree *rtpproxy_tree, tvbuff_t *tvb, guint begin, guint end)
|
||||
+{
|
||||
+ gint offset = 0;
|
||||
+ gint tmp = 0;
|
||||
+ gboolean ipv6 = FALSE;
|
||||
+ proto_item *ti;
|
||||
+
|
||||
+ /* Check for at least one colon */
|
||||
+ offset = tvb_find_guint8(tvb, begin, end, ':');
|
||||
+ if(offset != -1){
|
||||
+ /* Find if it's the latest colon (not in case of a IPv6) */
|
||||
+ while((tmp = tvb_find_guint8(tvb, offset+1, end, ':')) != -1){
|
||||
+ ipv6 = TRUE;
|
||||
+ offset = tmp;
|
||||
+ }
|
||||
+ /* We have ip:port */
|
||||
+ if(ipv6)
|
||||
+ proto_tree_add_item(rtpproxy_tree, hf_rtpproxy_notify_ipv6, tvb, begin, offset - begin, ENC_ASCII | ENC_NA);
|
||||
+ else
|
||||
+ proto_tree_add_item(rtpproxy_tree, hf_rtpproxy_notify_ipv4, tvb, begin, offset - begin, ENC_ASCII | ENC_NA);
|
||||
+ proto_tree_add_item(rtpproxy_tree, hf_rtpproxy_notify_port, tvb, offset+1, end - (offset+1), ENC_ASCII | ENC_NA);
|
||||
+ }
|
||||
+ else{
|
||||
+ /* Only port is supplied */
|
||||
+ ti = proto_tree_add_item(rtpproxy_tree, hf_rtpproxy_notify_ipv4, tvb, begin, 0, ENC_ASCII | ENC_NA);
|
||||
+ proto_item_append_text(ti, "<skipped>");
|
||||
+ proto_tree_add_item(rtpproxy_tree, hf_rtpproxy_notify_port, tvb, begin, end - begin, ENC_ASCII | ENC_NA);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static int
|
||||
+dissect_rtpproxy(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
|
||||
+{
|
||||
@ -364,10 +635,15 @@ index 0000000..f606abb
|
||||
+ guint8* rawstr;
|
||||
+ guint8* tmpstr;
|
||||
+ proto_item *ti;
|
||||
+ proto_item *ti2;
|
||||
+ proto_tree *rtpproxy_tree;
|
||||
+ conversation_t *conversation;
|
||||
+ rtpproxy_conv_info_t *rtpproxy_conv;
|
||||
+ gchar* cookie = NULL;
|
||||
+ /* For RT(C)P setup */
|
||||
+ address addr;
|
||||
+ guint16 port;
|
||||
+ guint32 ipaddr[4];
|
||||
+
|
||||
+ /* If it does not start with a printable character it's not RTPProxy */
|
||||
+ if(!isprint(tvb_get_guint8(tvb, 0)))
|
||||
@ -473,7 +749,8 @@ index 0000000..f606abb
|
||||
+
|
||||
+ if (new_offset != offset + 1){
|
||||
+ rtpproxy_tree = proto_item_add_subtree(ti, ett_rtpproxy_command);
|
||||
+ proto_tree_add_item(rtpproxy_tree, hf_rtpproxy_command_parameters, tvb, offset+1, new_offset - (offset+1), ENC_ASCII | ENC_NA);
|
||||
+ ti2 = proto_tree_add_item(rtpproxy_tree, hf_rtpproxy_command_parameters, tvb, offset+1, new_offset - (offset+1), ENC_ASCII | ENC_NA);
|
||||
+ rtpproxy_add_parameter(proto_item_add_subtree(ti2, ett_rtpproxy_command_parameters), tvb, offset+1, new_offset - (offset+1));
|
||||
+ rtpproxy_tree = proto_item_get_parent(ti);
|
||||
+ }
|
||||
+
|
||||
@ -532,14 +809,14 @@ index 0000000..f606abb
|
||||
+ }
|
||||
+
|
||||
+ /* Extract first tag */
|
||||
+ new_offset = rtpptoxy_add_tag(rtpproxy_tree, tvb, offset, realsize);
|
||||
+ new_offset = rtpproxy_add_tag(rtpproxy_tree, tvb, offset, realsize);
|
||||
+ if(new_offset == -1)
|
||||
+ break; /* No more parameters */
|
||||
+ /* Skip whitespace */
|
||||
+ offset = tvb_skip_wsp(tvb, new_offset+1, -1);
|
||||
+
|
||||
+ /* Extract second tag */
|
||||
+ new_offset = rtpptoxy_add_tag(rtpproxy_tree, tvb, offset, realsize);
|
||||
+ new_offset = rtpproxy_add_tag(rtpproxy_tree, tvb, offset, realsize);
|
||||
+ if(new_offset == -1)
|
||||
+ break; /* No more parameters */
|
||||
+ /* Skip whitespace */
|
||||
@ -547,27 +824,20 @@ index 0000000..f606abb
|
||||
+
|
||||
+ /* Extract Notification address */
|
||||
+ if (tmp == 'u'){
|
||||
+ new_offset = tvb_find_guint8(tvb, offset, -1, ' ');
|
||||
+ ti = proto_tree_add_item(rtpproxy_tree, hf_rtpproxy_notify, tvb, offset, realsize - offset, ENC_ASCII | ENC_NA);
|
||||
+ proto_item_set_text(ti, "Notify");
|
||||
+ rtpproxy_tree = proto_item_add_subtree(ti, ett_rtpproxy_notify);
|
||||
+
|
||||
+ /* Check for NotifyTag parameter (separated by space) */
|
||||
+ new_offset = tvb_find_guint8(tvb, offset, -1, ' ');
|
||||
+ if(new_offset == -1){
|
||||
+ /* FIXME only IPv4 is supported */
|
||||
+ new_offset = tvb_find_guint8(tvb, offset, -1, ':');
|
||||
+ proto_tree_add_item(rtpproxy_tree, hf_rtpproxy_notify_ipv4, tvb, offset, new_offset - offset, ENC_ASCII | ENC_NA);
|
||||
+ proto_tree_add_item(rtpproxy_tree, hf_rtpproxy_notify_port, tvb, new_offset+1, realsize - (new_offset+1), ENC_ASCII | ENC_NA);
|
||||
+ /* NotifyTag wasn't found (we should re-use Call-ID instead) */
|
||||
+ rtpproxy_add_notify_addr(rtpproxy_tree, tvb, offset, realsize);
|
||||
+ break; /* No more parameters */
|
||||
+ }
|
||||
+ if(new_offset - offset < 6){
|
||||
+ /* Only port is supplied */
|
||||
+ ti = proto_tree_add_item(rtpproxy_tree, hf_rtpproxy_notify_ipv4, tvb, offset, 0, ENC_ASCII | ENC_NA);
|
||||
+ proto_item_set_text(ti, "Notification IPv4: <skipped>");
|
||||
+ proto_tree_add_item(rtpproxy_tree, hf_rtpproxy_notify_port, tvb, offset, new_offset - offset, ENC_ASCII | ENC_NA);
|
||||
+ }
|
||||
+ else{
|
||||
+ proto_tree_add_item(rtpproxy_tree, hf_rtpproxy_notify_ipv4, tvb, offset, new_offset - offset, ENC_ASCII | ENC_NA);
|
||||
+ proto_tree_add_item(rtpproxy_tree, hf_rtpproxy_notify_port, tvb, new_offset+1, realsize - (new_offset+1), ENC_ASCII | ENC_NA);
|
||||
+ }
|
||||
+
|
||||
+ /* NotifyTag was found */
|
||||
+ rtpproxy_add_notify_addr(rtpproxy_tree, tvb, offset, new_offset);
|
||||
+ /* Skip whitespace */
|
||||
+ offset = tvb_skip_wsp(tvb, new_offset+1, -1);
|
||||
+
|
||||
@ -624,16 +894,38 @@ index 0000000..f606abb
|
||||
+
|
||||
+ /* Extract Port */
|
||||
+ new_offset = tvb_find_guint8(tvb, offset, -1, ' ');
|
||||
+ /* Convert port to unsigned 16-bit number */
|
||||
+ port = (guint16) g_ascii_strtoull((gchar*)tvb_get_ephemeral_string(tvb, offset, new_offset - offset), NULL, 10);
|
||||
+ proto_tree_add_item(rtpproxy_tree, hf_rtpproxy_port, tvb, offset, new_offset - offset, ENC_ASCII | ENC_NA);
|
||||
+ /* Skip whitespace */
|
||||
+ offset = tvb_skip_wsp(tvb, new_offset+1, -1);
|
||||
+
|
||||
+ /* Extract IP */
|
||||
+ tmp = tvb_find_line_end(tvb, offset, -1, &new_offset, FALSE);
|
||||
+ if (tvb_find_guint8(tvb, offset, -1, ':') == -1)
|
||||
+ if (tvb_find_guint8(tvb, offset, -1, ':') == -1){
|
||||
+ inet_pton(AF_INET, (char*)tvb_get_ephemeral_string(tvb, offset, tmp), &ipaddr);
|
||||
+ addr.type = AT_IPv4;
|
||||
+ addr.len = 4;
|
||||
+ addr.data = ep_memdup(&ipaddr, 4);
|
||||
+ proto_tree_add_item(rtpproxy_tree, hf_rtpproxy_ipv4, tvb, offset, tmp, ENC_ASCII | ENC_NA);
|
||||
+ else
|
||||
+ }
|
||||
+ else{
|
||||
+ inet_pton(AF_INET6, (char*)tvb_get_ephemeral_string(tvb, offset, tmp), &ipaddr);
|
||||
+ addr.type = AT_IPv6;
|
||||
+ addr.len = 16;
|
||||
+ addr.data = ep_memdup(&ipaddr, 16);
|
||||
+ proto_tree_add_item(rtpproxy_tree, hf_rtpproxy_ipv6, tvb, offset, tmp, ENC_ASCII | ENC_NA);
|
||||
+ }
|
||||
+
|
||||
+ if(rtpproxy_establish_conversation){
|
||||
+ if (rtp_handle) {
|
||||
+ /* FIXME tell if isn't a video stream, and setup codec mapping */
|
||||
+ rtp_add_address(pinfo, &addr, port, 0, "RTPproxy", pinfo->fd->num, 0, NULL);
|
||||
+ }
|
||||
+ if (rtcp_handle) {
|
||||
+ rtcp_add_address(pinfo, &addr, port+1, 0, "RTPproxy", pinfo->fd->num);
|
||||
+ }
|
||||
+ }
|
||||
+ break;
|
||||
+ default:
|
||||
+ break;
|
||||
@ -807,6 +1099,123 @@ index 0000000..f606abb
|
||||
+ }
|
||||
+ },
|
||||
+ {
|
||||
+ &hf_rtpproxy_command_parameter,
|
||||
+ {
|
||||
+ "Parameter",
|
||||
+ "rtpproxy.command_parameter",
|
||||
+ FT_UINT8,
|
||||
+ BASE_DEC,
|
||||
+ VALS(paramtypenames),
|
||||
+ 0x0,
|
||||
+ NULL,
|
||||
+ HFILL
|
||||
+ }
|
||||
+ },
|
||||
+ {
|
||||
+ &hf_rtpproxy_command_parameter_codec,
|
||||
+ {
|
||||
+ "Allowed codec",
|
||||
+ "rtpproxy.command_parameter_codec",
|
||||
+ FT_STRING,
|
||||
+ BASE_NONE,
|
||||
+ NULL,
|
||||
+ 0x0,
|
||||
+ NULL,
|
||||
+ HFILL
|
||||
+ }
|
||||
+ },
|
||||
+ {
|
||||
+ &hf_rtpproxy_command_parameter_local,
|
||||
+ {
|
||||
+ "Local IP address",
|
||||
+ "rtpproxy.command_parameter_local",
|
||||
+ FT_STRING,
|
||||
+ BASE_NONE,
|
||||
+ NULL,
|
||||
+ 0x0,
|
||||
+ NULL,
|
||||
+ HFILL
|
||||
+ }
|
||||
+ },
|
||||
+ {
|
||||
+ &hf_rtpproxy_command_parameter_remote,
|
||||
+ {
|
||||
+ "Remote IP address",
|
||||
+ "rtpproxy.command_parameter_remote",
|
||||
+ FT_STRING,
|
||||
+ BASE_NONE,
|
||||
+ NULL,
|
||||
+ 0x0,
|
||||
+ NULL,
|
||||
+ HFILL
|
||||
+ }
|
||||
+ },
|
||||
+ {
|
||||
+ &hf_rtpproxy_command_parameter_repacketize,
|
||||
+ {
|
||||
+ "Repacketize (ms)",
|
||||
+ "rtpproxy.command_parameter_repacketize",
|
||||
+ FT_STRING,
|
||||
+ BASE_NONE,
|
||||
+ NULL,
|
||||
+ 0x0,
|
||||
+ NULL,
|
||||
+ HFILL
|
||||
+ }
|
||||
+ },
|
||||
+ {
|
||||
+ &hf_rtpproxy_command_parameter_dtmf,
|
||||
+ {
|
||||
+ "DTMF payload ID",
|
||||
+ "rtpproxy.command_parameter_dtmf",
|
||||
+ FT_STRING,
|
||||
+ BASE_NONE,
|
||||
+ NULL,
|
||||
+ 0x0,
|
||||
+ NULL,
|
||||
+ HFILL
|
||||
+ }
|
||||
+ },
|
||||
+ {
|
||||
+ &hf_rtpproxy_command_parameter_proto,
|
||||
+ {
|
||||
+ "RTP tramsission protocol",
|
||||
+ "rtpproxy.command_parameter_proto",
|
||||
+ FT_UINT8,
|
||||
+ BASE_DEC,
|
||||
+ VALS(prototypenames),
|
||||
+ 0x0,
|
||||
+ NULL,
|
||||
+ HFILL
|
||||
+ }
|
||||
+ },
|
||||
+ {
|
||||
+ &hf_rtpproxy_command_parameter_transcode,
|
||||
+ {
|
||||
+ "Transcode to",
|
||||
+ "rtpproxy.command_parameter_transcode",
|
||||
+ FT_STRING,
|
||||
+ BASE_NONE,
|
||||
+ NULL,
|
||||
+ 0x0,
|
||||
+ NULL,
|
||||
+ HFILL
|
||||
+ }
|
||||
+ },
|
||||
+ {
|
||||
+ &hf_rtpproxy_command_parameter_acc,
|
||||
+ {
|
||||
+ "Accounting",
|
||||
+ "rtpproxy.command_parameter_acc",
|
||||
+ FT_UINT8,
|
||||
+ BASE_DEC,
|
||||
+ VALS(acctypenames),
|
||||
+ 0x0,
|
||||
+ NULL,
|
||||
+ HFILL
|
||||
+ }
|
||||
+ },
|
||||
+ {
|
||||
+ &hf_rtpproxy_copy_target,
|
||||
+ {
|
||||
+ "Copy target",
|
||||
@ -911,6 +1320,19 @@ index 0000000..f606abb
|
||||
+ }
|
||||
+ },
|
||||
+ {
|
||||
+ &hf_rtpproxy_notify_ipv6,
|
||||
+ {
|
||||
+ "Notification IPv6",
|
||||
+ "rtpproxy.notify_ipv6",
|
||||
+ FT_STRING,
|
||||
+ BASE_NONE,
|
||||
+ NULL,
|
||||
+ 0x0,
|
||||
+ NULL,
|
||||
+ HFILL
|
||||
+ }
|
||||
+ },
|
||||
+ {
|
||||
+ &hf_rtpproxy_notify_port,
|
||||
+ {
|
||||
+ "Notification Port",
|
||||
@ -1009,6 +1431,16 @@ index 0000000..f606abb
|
||||
+ &ett_rtpproxy,
|
||||
+ &ett_rtpproxy_request,
|
||||
+ &ett_rtpproxy_command,
|
||||
+ &ett_rtpproxy_command_parameters,
|
||||
+ &ett_rtpproxy_command_parameters_codecs,
|
||||
+ &ett_rtpproxy_command_parameters_local,
|
||||
+ &ett_rtpproxy_command_parameters_remote,
|
||||
+ &ett_rtpproxy_command_parameters_repacketize,
|
||||
+ &ett_rtpproxy_command_parameters_dtmf,
|
||||
+ &ett_rtpproxy_command_parameters_cmap,
|
||||
+ &ett_rtpproxy_command_parameters_proto,
|
||||
+ &ett_rtpproxy_command_parameters_transcode,
|
||||
+ &ett_rtpproxy_command_parameters_acc,
|
||||
+ &ett_rtpproxy_tag,
|
||||
+ &ett_rtpproxy_notify,
|
||||
+ &ett_rtpproxy_reply
|
||||
@ -1035,6 +1467,11 @@ index 0000000..f606abb
|
||||
+ "RTPproxy UDP Port", /* Descr */
|
||||
+ 10,
|
||||
+ &rtpproxy_udp_port);
|
||||
+ prefs_register_bool_preference(rtpproxy_module, "establish_conversation",
|
||||
+ "Establish Media Conversation",
|
||||
+ "Specifies that RTP/RTCP/T.38/MSRP/etc streams are decoded based "
|
||||
+ "upon port numbers found in RTPproxy answers",
|
||||
+ &rtpproxy_establish_conversation);
|
||||
+}
|
||||
+
|
||||
+void
|
||||
@ -1066,6 +1503,10 @@ index 0000000..f606abb
|
||||
+ if(rtpproxy_udp_port != 0 && old_rtpproxy_udp_port != rtpproxy_udp_port)
|
||||
+ dissector_add_uint("udp.port", rtpproxy_udp_port, rtpproxy_udp_handle);
|
||||
+ old_rtpproxy_udp_port = rtpproxy_udp_port;
|
||||
+
|
||||
+ rtcp_handle = find_dissector("rtcp");
|
||||
+ rtp_events_handle = find_dissector("rtpevent");
|
||||
+ rtp_handle = find_dissector("rtp");
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
|
@ -1,4 +1,3 @@
|
||||
From 1904600d69fb059c768170d12d636137f3b19de0 Mon Sep 17 00:00:00 2001
|
||||
From: Anders Broman <anders.broman@ericsson.com>
|
||||
Date: Thu, 11 Jul 2013 21:13:27 +0000
|
||||
Subject: [PATCH] The beginning of an openflow dissector.
|
||||
|
@ -1,4 +1,3 @@
|
||||
From 37c27f6c58004b8682bcc3bb10c2cc13cd81a653 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Radek=20Vok=C3=A1l?= <rvokal@fedoraproject.org>
|
||||
Date: Mon, 21 Dec 2009 11:19:39 +0000
|
||||
Subject: [PATCH] adds autoconf macro file
|
||||
|
@ -1,4 +1,3 @@
|
||||
From 1022a03e6f71efdff1b91c87b2426a229a24791d Mon Sep 17 00:00:00 2001
|
||||
From: Peter Lemenkov <lemenkov@gmail.com>
|
||||
Date: Fri, 13 Sep 2013 14:36:55 +0400
|
||||
Subject: [PATCH] Restore Fedora-specific groups
|
||||
|
@ -1,4 +1,3 @@
|
||||
From 5fcb09305500b72fa2cb584c4ef8ab0e3a08c22c Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Radek=20Vok=C3=A1l?= <rvokal@fedoraproject.org>
|
||||
Date: Thu, 17 Dec 2009 09:17:07 +0000
|
||||
Subject: [PATCH] Add pkgconfig entry
|
||||
|
@ -1,4 +1,3 @@
|
||||
From 019eea6cacbf7f01290ac6b42c1609c573ba0a33 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Lemenkov <lemenkov@gmail.com>
|
||||
Date: Fri, 13 Sep 2013 15:25:12 +0400
|
||||
Subject: [PATCH] Install autoconf-related file
|
||||
|
@ -1,4 +1,3 @@
|
||||
From 0ecd119162d513c50e37206846f4238257fde247 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Hatina <phatina@redhat.com>
|
||||
Date: Tue, 24 Sep 2013 10:55:09 +0200
|
||||
Subject: [PATCH] move default temporary directory to /var/tmp
|
||||
|
60
wireshark-0013-Copy-over-r49999-from-trunk.patch
Normal file
60
wireshark-0013-Copy-over-r49999-from-trunk.patch
Normal file
@ -0,0 +1,60 @@
|
||||
From: Guy Harris <guy@alum.mit.edu>
|
||||
Date: Thu, 7 Nov 2013 01:54:16 +0000
|
||||
Subject: [PATCH] Copy over r49999 from trunk:
|
||||
|
||||
------------------------------------------------------------------------
|
||||
r49999 | eapache | 2013-06-17 18:02:26 -0700 (Mon, 17 Jun 2013) | 10 lines
|
||||
|
||||
Don't limit the on-the-wire length of packets to 64KB, there are larger packets
|
||||
out there (especially over USB) and we should be able to load them as long as
|
||||
they are snapped to a sane length.
|
||||
|
||||
Also validate that packets do not specify a snapshot length larger than the one
|
||||
in the file header, though only make it a warning, as this is not necessarily a
|
||||
fatally corrupt packet.
|
||||
|
||||
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=8808
|
||||
|
||||
------------------------------------------------------------------------
|
||||
|
||||
Also fixes bug 9390.
|
||||
|
||||
svn path=/trunk-1.10/; revision=53123
|
||||
|
||||
diff --git a/wiretap/libpcap.c b/wiretap/libpcap.c
|
||||
index cb9e97c..9601332 100644
|
||||
--- a/wiretap/libpcap.c
|
||||
+++ b/wiretap/libpcap.c
|
||||
@@ -773,21 +773,8 @@ static int libpcap_read_header(wtap *wth, int *err, gchar **err_info,
|
||||
return -1;
|
||||
}
|
||||
|
||||
- if (hdr->hdr.orig_len > WTAP_MAX_PACKET_SIZE) {
|
||||
- /*
|
||||
- * Probably a corrupt capture file; return an error,
|
||||
- * so that our caller doesn't blow up trying to
|
||||
- * cope with a huge "real" packet length, and so that
|
||||
- * the code to try to guess what type of libpcap file
|
||||
- * this is can tell when it's not the type we're guessing
|
||||
- * it is.
|
||||
- */
|
||||
- *err = WTAP_ERR_BAD_FILE;
|
||||
- if (err_info != NULL) {
|
||||
- *err_info = g_strdup_printf("pcap: File has %u-byte packet, bigger than maximum of %u",
|
||||
- hdr->hdr.orig_len, WTAP_MAX_PACKET_SIZE);
|
||||
- }
|
||||
- return -1;
|
||||
+ if (hdr->hdr.incl_len > wth->snapshot_length) {
|
||||
+ g_warning("pcap: File has packet larger than file's snapshot length.");
|
||||
}
|
||||
|
||||
return bytes_read;
|
||||
@@ -955,7 +942,7 @@ static gboolean libpcap_dump(wtap_dumper *wdh,
|
||||
rec_hdr.hdr.incl_len = phdr->caplen + phdrsize;
|
||||
rec_hdr.hdr.orig_len = phdr->len + phdrsize;
|
||||
|
||||
- if (rec_hdr.hdr.incl_len > WTAP_MAX_PACKET_SIZE || rec_hdr.hdr.orig_len > WTAP_MAX_PACKET_SIZE) {
|
||||
+ if (rec_hdr.hdr.incl_len > WTAP_MAX_PACKET_SIZE) {
|
||||
*err = WTAP_ERR_BAD_FILE;
|
||||
return FALSE;
|
||||
}
|
@ -1,129 +0,0 @@
|
||||
From a507e19a98210dd7347acd0ffad901c915d09751 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Lemenkov <lemenkov@gmail.com>
|
||||
Date: Thu, 7 Nov 2013 22:12:37 +0400
|
||||
Subject: [PATCH] Initial version of RT(C)P dissector hinting
|
||||
|
||||
Backported from patch sent upstream:
|
||||
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9397
|
||||
|
||||
Signed-off-by: Peter Lemenkov <lemenkov@gmail.com>
|
||||
|
||||
diff --git a/epan/dissectors/packet-rtpproxy.c b/epan/dissectors/packet-rtpproxy.c
|
||||
index f606abb..7920e87 100644
|
||||
--- a/epan/dissectors/packet-rtpproxy.c
|
||||
+++ b/epan/dissectors/packet-rtpproxy.c
|
||||
@@ -31,11 +31,24 @@
|
||||
#include "config.h"
|
||||
|
||||
#include <ctype.h>
|
||||
+#include <glib.h>
|
||||
|
||||
+#include <epan/address.h>
|
||||
#include <epan/packet.h>
|
||||
#include <epan/prefs.h>
|
||||
#include <epan/conversation.h>
|
||||
|
||||
+#ifdef HAVE_ARPA_INET_H
|
||||
+#include <arpa/inet.h>
|
||||
+#endif
|
||||
+#ifdef NEED_INET_V6DEFS_H
|
||||
+# include "wsutil/inet_v6defs.h"
|
||||
+#endif
|
||||
+
|
||||
+/* For setting up RTP/RTCP dissectors based on the RTPproxy's answers */
|
||||
+#include "packet-rtp.h"
|
||||
+#include "packet-rtcp.h"
|
||||
+
|
||||
static int proto_rtpproxy = -1;
|
||||
|
||||
static int hf_rtpproxy_cookie = -1;
|
||||
@@ -74,6 +87,9 @@ typedef struct _rtpproxy_info {
|
||||
nstime_t req_time;
|
||||
} rtpproxy_info_t;
|
||||
|
||||
+static dissector_handle_t rtp_handle;
|
||||
+static dissector_handle_t rtcp_handle;
|
||||
+
|
||||
typedef struct _rtpproxy_conv_info {
|
||||
emem_tree_t *trans;
|
||||
} rtpproxy_conv_info_t;
|
||||
@@ -158,6 +174,7 @@ static gint ett_rtpproxy_reply = -1;
|
||||
|
||||
static guint rtpproxy_tcp_port = 22222;
|
||||
static guint rtpproxy_udp_port = 22222;
|
||||
+static gboolean rtpproxy_establish_conversation = TRUE;
|
||||
|
||||
void proto_reg_handoff_rtpproxy(void);
|
||||
|
||||
@@ -245,6 +262,10 @@ dissect_rtpproxy(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data
|
||||
conversation_t *conversation;
|
||||
rtpproxy_conv_info_t *rtpproxy_conv;
|
||||
gchar* cookie = NULL;
|
||||
+ /* For RT(C)P setup */
|
||||
+ address addr;
|
||||
+ guint16 port;
|
||||
+ guint32 ipaddr[4];
|
||||
|
||||
/* If it does not start with a printable character it's not RTPProxy */
|
||||
if(!isprint(tvb_get_guint8(tvb, 0)))
|
||||
@@ -501,16 +522,36 @@ dissect_rtpproxy(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data
|
||||
|
||||
/* Extract Port */
|
||||
new_offset = tvb_find_guint8(tvb, offset, -1, ' ');
|
||||
+ /* Convert port to unsigned 16-bit number */
|
||||
+ port = (guint16) g_ascii_strtoull((gchar*)tvb_get_ephemeral_string(tvb, offset, new_offset - offset), NULL, 10);
|
||||
proto_tree_add_item(rtpproxy_tree, hf_rtpproxy_port, tvb, offset, new_offset - offset, ENC_ASCII | ENC_NA);
|
||||
/* Skip whitespace */
|
||||
offset = tvb_skip_wsp(tvb, new_offset+1, -1);
|
||||
|
||||
/* Extract IP */
|
||||
tmp = tvb_find_line_end(tvb, offset, -1, &new_offset, FALSE);
|
||||
- if (tvb_find_guint8(tvb, offset, -1, ':') == -1)
|
||||
+ if (tvb_find_guint8(tvb, offset, -1, ':') == -1){
|
||||
+ inet_pton(AF_INET, (char*)tvb_get_ephemeral_string(tvb, offset, tmp), &ipaddr);
|
||||
+ addr.type = AT_IPv4;
|
||||
+ addr.len = 4;
|
||||
+ addr.data = se_memdup(&ipaddr, 4);
|
||||
proto_tree_add_item(rtpproxy_tree, hf_rtpproxy_ipv4, tvb, offset, tmp, ENC_ASCII | ENC_NA);
|
||||
- else
|
||||
+ }
|
||||
+ else{
|
||||
+ inet_pton(AF_INET6, (char*)tvb_get_ephemeral_string(tvb, offset, tmp), &ipaddr);
|
||||
+ addr.type = AT_IPv6;
|
||||
+ addr.len = 16;
|
||||
+ addr.data = se_memdup(&ipaddr, 16);
|
||||
proto_tree_add_item(rtpproxy_tree, hf_rtpproxy_ipv6, tvb, offset, tmp, ENC_ASCII | ENC_NA);
|
||||
+ }
|
||||
+
|
||||
+ if (rtp_handle) {
|
||||
+ /* FIXME tell is is't a video stream, and setup codec mapping */
|
||||
+ rtp_add_address(pinfo, &addr, port, 0, "RTPproxy", pinfo->fd->num, 0, NULL);
|
||||
+ }
|
||||
+ if (rtcp_handle) {
|
||||
+ rtcp_add_address(pinfo, &addr, port+1, 0, "RTPproxy", pinfo->fd->num);
|
||||
+ }
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -912,6 +953,11 @@ proto_register_rtpproxy(void)
|
||||
"RTPproxy UDP Port", /* Descr */
|
||||
10,
|
||||
&rtpproxy_udp_port);
|
||||
+ prefs_register_bool_preference(rtpproxy_module, "establish_conversation",
|
||||
+ "Establish Media Conversation",
|
||||
+ "Specifies that RTP/RTCP/T.38/MSRP/etc streams are decoded based "
|
||||
+ "upon port numbers found in RTPproxy answers",
|
||||
+ &rtpproxy_establish_conversation);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -943,6 +989,9 @@ proto_reg_handoff_rtpproxy(void)
|
||||
if(rtpproxy_udp_port != 0 && old_rtpproxy_udp_port != rtpproxy_udp_port)
|
||||
dissector_add_uint("udp.port", rtpproxy_udp_port, rtpproxy_udp_handle);
|
||||
old_rtpproxy_udp_port = rtpproxy_udp_port;
|
||||
+
|
||||
+ rtp_handle = find_dissector("rtp");
|
||||
+ rtcp_handle = find_dissector("rtcp");
|
||||
}
|
||||
|
||||
/*
|
@ -0,0 +1,22 @@
|
||||
From: Pascal Quantin <pascal.quantin@gmail.com>
|
||||
Date: Sat, 9 Nov 2013 15:44:01 +0000
|
||||
Subject: [PATCH] Fix https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9388
|
||||
: Avoid an infinite loop in SIP dissector (backport of r51738)
|
||||
|
||||
svn path=/trunk-1.10/; revision=53195
|
||||
|
||||
diff --git a/epan/dissectors/packet-sip.c b/epan/dissectors/packet-sip.c
|
||||
index a3ceec2..b012837 100644
|
||||
--- a/epan/dissectors/packet-sip.c
|
||||
+++ b/epan/dissectors/packet-sip.c
|
||||
@@ -2134,6 +2134,10 @@ dissect_sip_common(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tr
|
||||
*/
|
||||
orig_offset = offset;
|
||||
linelen = tvb_find_line_end(tvb, offset, -1, &next_offset, FALSE);
|
||||
+ if(linelen==0){
|
||||
+ return -2;
|
||||
+ }
|
||||
+
|
||||
if (tvb_strnlen(tvb, offset, linelen) > -1)
|
||||
{
|
||||
/*
|
84
wireshark-0015-Add-expert-info-about-timeouts.patch
Normal file
84
wireshark-0015-Add-expert-info-about-timeouts.patch
Normal file
@ -0,0 +1,84 @@
|
||||
From: Peter Lemenkov <lemenkov@gmail.com>
|
||||
Date: Mon, 4 Nov 2013 22:46:16 +0400
|
||||
Subject: [PATCH] Add expert info about timeouts
|
||||
|
||||
Backported patch from this bugzilla ticket:
|
||||
|
||||
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9484
|
||||
|
||||
Signed-off-by: Peter Lemenkov <lemenkov@gmail.com>
|
||||
|
||||
diff --git a/epan/dissectors/packet-rtpproxy.c b/epan/dissectors/packet-rtpproxy.c
|
||||
index 831448b..04830bc 100644
|
||||
--- a/epan/dissectors/packet-rtpproxy.c
|
||||
+++ b/epan/dissectors/packet-rtpproxy.c
|
||||
@@ -37,6 +37,7 @@
|
||||
#include <epan/packet.h>
|
||||
#include <epan/prefs.h>
|
||||
#include <epan/conversation.h>
|
||||
+#include <epan/expert.h>
|
||||
|
||||
#ifdef HAVE_ARPA_INET_H
|
||||
#include <arpa/inet.h>
|
||||
@@ -248,9 +249,14 @@ static gint ett_rtpproxy_notify = -1;
|
||||
|
||||
static gint ett_rtpproxy_reply = -1;
|
||||
|
||||
+/* Default values */
|
||||
static guint rtpproxy_tcp_port = 22222;
|
||||
static guint rtpproxy_udp_port = 22222;
|
||||
static gboolean rtpproxy_establish_conversation = TRUE;
|
||||
+/* See - http://www.opensips.org/html/docs/modules/1.11.x/rtpproxy.html#id250018 */
|
||||
+/* See - http://www.kamailio.org/docs/modules/devel/modules/rtpproxy.html#idm448 */
|
||||
+static guint rtpproxy_timeout = 1000;
|
||||
+static nstime_t rtpproxy_timeout_ns = {1, 0};
|
||||
|
||||
void proto_reg_handoff_rtpproxy(void);
|
||||
|
||||
@@ -415,6 +421,8 @@ rtpproxy_add_tid(gboolean is_request, tvbuff_t *tvb, packet_info *pinfo, proto_t
|
||||
nstime_delta(&ns, &pinfo->fd->abs_ts, &rtpproxy_info->req_time);
|
||||
pi = proto_tree_add_time(rtpproxy_tree, hf_rtpproxy_response_time, tvb, 0, 0, &ns);
|
||||
PROTO_ITEM_SET_GENERATED(pi);
|
||||
+ if (nstime_cmp(&rtpproxy_timeout_ns, &ns) < 0)
|
||||
+ expert_add_info_format(pinfo, rtpproxy_tree, PI_RESPONSE_CODE, PI_WARN, "Response timeout %'.3f seconds", nstime_to_sec(&ns));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1283,6 +1291,7 @@ proto_register_rtpproxy(void)
|
||||
proto_register_subtree_array(ett, array_length(ett));
|
||||
|
||||
rtpproxy_module = prefs_register_protocol(proto_rtpproxy, proto_reg_handoff_rtpproxy);
|
||||
+
|
||||
prefs_register_uint_preference(rtpproxy_module, "tcp.port",
|
||||
"RTPproxy TCP Port", /* Title */
|
||||
"RTPproxy TCP Port", /* Descr */
|
||||
@@ -1294,11 +1303,18 @@ proto_register_rtpproxy(void)
|
||||
"RTPproxy UDP Port", /* Descr */
|
||||
10,
|
||||
&rtpproxy_udp_port);
|
||||
+
|
||||
prefs_register_bool_preference(rtpproxy_module, "establish_conversation",
|
||||
"Establish Media Conversation",
|
||||
"Specifies that RTP/RTCP/T.38/MSRP/etc streams are decoded based "
|
||||
"upon port numbers found in RTPproxy answers",
|
||||
&rtpproxy_establish_conversation);
|
||||
+
|
||||
+ prefs_register_uint_preference(rtpproxy_module, "reply.timeout",
|
||||
+ "RTPproxy reply timeout", /* Title */
|
||||
+ "Maximum timeout value in waiting for reply from RTPProxy (in milliseconds).", /* Descr */
|
||||
+ 10,
|
||||
+ &rtpproxy_timeout);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -1334,6 +1350,10 @@ proto_reg_handoff_rtpproxy(void)
|
||||
rtcp_handle = find_dissector("rtcp");
|
||||
rtp_events_handle = find_dissector("rtpevent");
|
||||
rtp_handle = find_dissector("rtp");
|
||||
+
|
||||
+ /* Calculate nstime_t struct for the timeout from the rtpproxy_timeout value in milliseconds */
|
||||
+ rtpproxy_timeout_ns.secs = (rtpproxy_timeout - rtpproxy_timeout % 1000) / 1000;
|
||||
+ rtpproxy_timeout_ns.nsecs = (rtpproxy_timeout % 1000) * 1000;
|
||||
}
|
||||
|
||||
/*
|
@ -21,7 +21,7 @@
|
||||
Summary: Network traffic analyzer
|
||||
Name: wireshark
|
||||
Version: 1.10.3
|
||||
Release: 4%{?dist}
|
||||
Release: 5%{?dist}
|
||||
License: GPL+
|
||||
Group: Applications/Internet
|
||||
Source0: http://wireshark.org/download/src/%{name}-%{version}.tar.bz2
|
||||
@ -47,9 +47,13 @@ Patch10: wireshark-0010-Add-pkgconfig-entry.patch
|
||||
Patch11: wireshark-0011-Install-autoconf-related-file.patch
|
||||
# Fedora-specific
|
||||
Patch12: wireshark-0012-move-default-temporary-directory-to-var-tmp.patch
|
||||
# Backported from upstream.
|
||||
Patch13: wireshark-0013-Copy-over-r49999-from-trunk.patch
|
||||
# Backported from upstream.
|
||||
Patch14: wireshark-0014-Fix-https-bugs.wireshark.org-bugzilla-show_bug.cgi-i.patch
|
||||
# Backported to 1.10.x from the patch from this ticket:
|
||||
# https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9397
|
||||
Patch13: wireshark-0013-Initial-version-of-RT-C-P-dissector-hinting.patch
|
||||
# https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9484
|
||||
Patch15: wireshark-0015-Add-expert-info-about-timeouts.patch
|
||||
|
||||
Url: http://www.wireshark.org/
|
||||
BuildRequires: libpcap-devel >= 0.9
|
||||
@ -156,7 +160,9 @@ and plugins.
|
||||
%patch10 -p1 -b .add_pkgconfig
|
||||
%patch11 -p1 -b .install_autoconf
|
||||
%patch12 -p1 -b .tmp_dir
|
||||
%patch13 -p1 -b .rtpproxy_hinting
|
||||
%patch13 -p1 -b .allow_64kpackets_for_usb
|
||||
%patch14 -p1 -b .dont_die_during_sip_dissection
|
||||
%patch15 -p1 -b .add_expert_info_about_rtpproxy
|
||||
|
||||
%build
|
||||
%ifarch s390 s390x sparcv9 sparc64
|
||||
@ -351,6 +357,12 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
|
||||
%{_datadir}/aclocal/*
|
||||
|
||||
%changelog
|
||||
* Wed Nov 27 2013 Peter Lemenkov <lemenkov@gmail.com> - 1.10.3-5
|
||||
- Updated RTPproxy dissector (again)
|
||||
- Allow packets more than 64k (for USB capture). See patch no. 13
|
||||
- Don't die during loading of some SIP capture files. See patch no. 14
|
||||
- Backport support for RTPproxy dissector timeouts detection. See patch no. 15
|
||||
|
||||
* Wed Nov 13 2013 Peter Lemenkov <lemenkov@gmail.com> - 1.10.3-4
|
||||
- Updated RTPproxy dissector
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user