[wireshark] Few bugfixes and enhancements

Peter Lemenkov peter at fedoraproject.org
Wed Nov 27 12:25:01 UTC 2013


commit 65d033ba7781e42dc3bf3aade9a57b60043b30a1
Author: Peter Lemenkov <lemenkov at gmail.com>
Date:   Wed Nov 27 16:24:19 2013 +0400

    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 at gmail.com>

 wireshark-0001-enable-Lua-support.patch            |    1 -
 ...rk-0002-Customize-permission-denied-error.patch |    1 -
 ...Load-correct-shared-object-name-in-python.patch |    1 -
 wireshark-0004-fix-documentation-build-error.patch |    1 -
 ...05-fix-string-overrun-in-plugins-profinet.patch |    1 -
 ...Lemenkov-via-https-bugs.wireshark.org-bug.patch |  491 +++++++++++++++++++-
 ...07-The-beginning-of-an-openflow-dissector.patch |    1 -
 wireshark-0008-adds-autoconf-macro-file.patch      |    1 -
 ...shark-0009-Restore-Fedora-specific-groups.patch |    1 -
 wireshark-0010-Add-pkgconfig-entry.patch           |    1 -
 wireshark-0011-Install-autoconf-related-file.patch |    1 -
 ...ve-default-temporary-directory-to-var-tmp.patch |    1 -
 wireshark-0013-Copy-over-r49999-from-trunk.patch   |   60 +++
 ...itial-version-of-RT-C-P-dissector-hinting.patch |  129 -----
 ...ugs.wireshark.org-bugzilla-show_bug.cgi-i.patch |   22 +
 ...shark-0015-Add-expert-info-about-timeouts.patch |   84 ++++
 wireshark.spec                                     |   20 +-
 17 files changed, 648 insertions(+), 169 deletions(-)
---
diff --git a/wireshark-0001-enable-Lua-support.patch b/wireshark-0001-enable-Lua-support.patch
index 551ff10..1daa4ba 100644
--- a/wireshark-0001-enable-Lua-support.patch
+++ b/wireshark-0001-enable-Lua-support.patch
@@ -1,4 +1,3 @@
-From 9d38601b45c6bce770946ac3c36a675a2f1a4359 Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Radek=20Vok=C3=A1l?= <rvokal at fedoraproject.org>
 Date: Tue, 15 Dec 2009 08:36:27 +0000
 Subject: [PATCH] enable Lua support
diff --git a/wireshark-0002-Customize-permission-denied-error.patch b/wireshark-0002-Customize-permission-denied-error.patch
index b3307ff..8d706a5 100644
--- a/wireshark-0002-Customize-permission-denied-error.patch
+++ b/wireshark-0002-Customize-permission-denied-error.patch
@@ -1,4 +1,3 @@
-From d7b9380cb2b827fb627f82a1c3b73496b089b8dd Mon Sep 17 00:00:00 2001
 From: Jan Safranek <jsafrane at redhat.com>
 Date: Fri, 26 Nov 2010 14:30:45 +0300
 Subject: [PATCH] Customize 'permission denied' error.
diff --git a/wireshark-0003-Load-correct-shared-object-name-in-python.patch b/wireshark-0003-Load-correct-shared-object-name-in-python.patch
index 11d7c26..b028ed8 100644
--- a/wireshark-0003-Load-correct-shared-object-name-in-python.patch
+++ b/wireshark-0003-Load-correct-shared-object-name-in-python.patch
@@ -1,4 +1,3 @@
-From 0d0f937fcbb73fb36a44bd7061817ff1cdac0032 Mon Sep 17 00:00:00 2001
 From: Jan Safranek <jsafrane at redhat.com>
 Date: Thu, 9 Jun 2011 14:56:59 +0200
 Subject: [PATCH] Load correct shared object name in python.
diff --git a/wireshark-0004-fix-documentation-build-error.patch b/wireshark-0004-fix-documentation-build-error.patch
index d67f5ce..365633c 100644
--- a/wireshark-0004-fix-documentation-build-error.patch
+++ b/wireshark-0004-fix-documentation-build-error.patch
@@ -1,4 +1,3 @@
-From 8e34a9a261f26ceabc39ea373d9025a24805b832 Mon Sep 17 00:00:00 2001
 From: Peter Hatina <phatina at redhat.com>
 Date: Mon, 8 Apr 2013 13:03:24 +0200
 Subject: [PATCH] fix documentation build error
diff --git a/wireshark-0005-fix-string-overrun-in-plugins-profinet.patch b/wireshark-0005-fix-string-overrun-in-plugins-profinet.patch
index 1ab72e5..bb4268d 100644
--- a/wireshark-0005-fix-string-overrun-in-plugins-profinet.patch
+++ b/wireshark-0005-fix-string-overrun-in-plugins-profinet.patch
@@ -1,4 +1,3 @@
-From dfd843cda67cfd9b785b44f5096a185c04c08be8 Mon Sep 17 00:00:00 2001
 From: Peter Hatina <phatina at redhat.com>
 Date: Wed, 4 Sep 2013 10:03:57 +0200
 Subject: [PATCH] fix string overrun in plugins/profinet
diff --git a/wireshark-0006-From-Peter-Lemenkov-via-https-bugs.wireshark.org-bug.patch b/wireshark-0006-From-Peter-Lemenkov-via-https-bugs.wireshark.org-bug.patch
index 408fcaa..6d61ce0 100644
--- a/wireshark-0006-From-Peter-Lemenkov-via-https-bugs.wireshark.org-bug.patch
+++ b/wireshark-0006-From-Peter-Lemenkov-via-https-bugs.wireshark.org-bug.patch
@@ -1,4 +1,3 @@
-From 1b67a9195503e6f22429a46e98def1dd31a05451 Mon Sep 17 00:00:00 2001
 From: Evan Huus <eapache at 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 at 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");
 +}
 +
 +/*
diff --git a/wireshark-0007-The-beginning-of-an-openflow-dissector.patch b/wireshark-0007-The-beginning-of-an-openflow-dissector.patch
index cda6e01..032499d 100644
--- a/wireshark-0007-The-beginning-of-an-openflow-dissector.patch
+++ b/wireshark-0007-The-beginning-of-an-openflow-dissector.patch
@@ -1,4 +1,3 @@
-From 1904600d69fb059c768170d12d636137f3b19de0 Mon Sep 17 00:00:00 2001
 From: Anders Broman <anders.broman at ericsson.com>
 Date: Thu, 11 Jul 2013 21:13:27 +0000
 Subject: [PATCH] The beginning of an openflow dissector.
diff --git a/wireshark-0008-adds-autoconf-macro-file.patch b/wireshark-0008-adds-autoconf-macro-file.patch
index d064d98..5c1818d 100644
--- a/wireshark-0008-adds-autoconf-macro-file.patch
+++ b/wireshark-0008-adds-autoconf-macro-file.patch
@@ -1,4 +1,3 @@
-From 37c27f6c58004b8682bcc3bb10c2cc13cd81a653 Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Radek=20Vok=C3=A1l?= <rvokal at fedoraproject.org>
 Date: Mon, 21 Dec 2009 11:19:39 +0000
 Subject: [PATCH] adds autoconf macro file
diff --git a/wireshark-0009-Restore-Fedora-specific-groups.patch b/wireshark-0009-Restore-Fedora-specific-groups.patch
index 3c030fe..7d8fca4 100644
--- a/wireshark-0009-Restore-Fedora-specific-groups.patch
+++ b/wireshark-0009-Restore-Fedora-specific-groups.patch
@@ -1,4 +1,3 @@
-From 1022a03e6f71efdff1b91c87b2426a229a24791d Mon Sep 17 00:00:00 2001
 From: Peter Lemenkov <lemenkov at gmail.com>
 Date: Fri, 13 Sep 2013 14:36:55 +0400
 Subject: [PATCH] Restore Fedora-specific groups
diff --git a/wireshark-0010-Add-pkgconfig-entry.patch b/wireshark-0010-Add-pkgconfig-entry.patch
index 1c81670..cd6f5ac 100644
--- a/wireshark-0010-Add-pkgconfig-entry.patch
+++ b/wireshark-0010-Add-pkgconfig-entry.patch
@@ -1,4 +1,3 @@
-From 5fcb09305500b72fa2cb584c4ef8ab0e3a08c22c Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Radek=20Vok=C3=A1l?= <rvokal at fedoraproject.org>
 Date: Thu, 17 Dec 2009 09:17:07 +0000
 Subject: [PATCH] Add pkgconfig entry
diff --git a/wireshark-0011-Install-autoconf-related-file.patch b/wireshark-0011-Install-autoconf-related-file.patch
index da92f94..3b5d737 100644
--- a/wireshark-0011-Install-autoconf-related-file.patch
+++ b/wireshark-0011-Install-autoconf-related-file.patch
@@ -1,4 +1,3 @@
-From 019eea6cacbf7f01290ac6b42c1609c573ba0a33 Mon Sep 17 00:00:00 2001
 From: Peter Lemenkov <lemenkov at gmail.com>
 Date: Fri, 13 Sep 2013 15:25:12 +0400
 Subject: [PATCH] Install autoconf-related file
diff --git a/wireshark-0012-move-default-temporary-directory-to-var-tmp.patch b/wireshark-0012-move-default-temporary-directory-to-var-tmp.patch
index ce64f4a..9b64428 100644
--- a/wireshark-0012-move-default-temporary-directory-to-var-tmp.patch
+++ b/wireshark-0012-move-default-temporary-directory-to-var-tmp.patch
@@ -1,4 +1,3 @@
-From 0ecd119162d513c50e37206846f4238257fde247 Mon Sep 17 00:00:00 2001
 From: Peter Hatina <phatina at redhat.com>
 Date: Tue, 24 Sep 2013 10:55:09 +0200
 Subject: [PATCH] move default temporary directory to /var/tmp
diff --git a/wireshark-0013-Copy-over-r49999-from-trunk.patch b/wireshark-0013-Copy-over-r49999-from-trunk.patch
new file mode 100644
index 0000000..e078a09
--- /dev/null
+++ b/wireshark-0013-Copy-over-r49999-from-trunk.patch
@@ -0,0 +1,60 @@
+From: Guy Harris <guy at 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;
+ 	}
diff --git a/wireshark-0014-Fix-https-bugs.wireshark.org-bugzilla-show_bug.cgi-i.patch b/wireshark-0014-Fix-https-bugs.wireshark.org-bugzilla-show_bug.cgi-i.patch
new file mode 100644
index 0000000..3cfb271
--- /dev/null
+++ b/wireshark-0014-Fix-https-bugs.wireshark.org-bugzilla-show_bug.cgi-i.patch
@@ -0,0 +1,22 @@
+From: Pascal Quantin <pascal.quantin at 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)
+ 	{
+ 		/*
diff --git a/wireshark-0015-Add-expert-info-about-timeouts.patch b/wireshark-0015-Add-expert-info-about-timeouts.patch
new file mode 100644
index 0000000..2168a42
--- /dev/null
+++ b/wireshark-0015-Add-expert-info-about-timeouts.patch
@@ -0,0 +1,84 @@
+From: Peter Lemenkov <lemenkov at 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 at 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;
+ }
+ 
+ /*
diff --git a/wireshark.spec b/wireshark.spec
index 95f98ff..fc1172b 100644
--- a/wireshark.spec
+++ b/wireshark.spec
@@ -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 at 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 at gmail.com> - 1.10.3-4
 - Updated RTPproxy dissector
 


More information about the scm-commits mailing list