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:
Peter Lemenkov 2013-11-27 16:24:19 +04:00
parent 1738882448
commit 65d033ba77
17 changed files with 648 additions and 169 deletions

View File

@ -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

View File

@ -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.

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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");
+}
+
+/*

View File

@ -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.

View File

@ -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

View 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

View File

@ -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

View File

@ -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

View 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

View 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;
}

View File

@ -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");
}
/*

View File

@ -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)
{
/*

View 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;
}
/*

View File

@ -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