From 65d033ba7781e42dc3bf3aade9a57b60043b30a1 Mon Sep 17 00:00:00 2001 From: Peter Lemenkov Date: Nov 27 2013 12:24:19 +0000 Subject: 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 --- 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?= 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 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 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 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 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 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 @@ -154,11 +204,27 @@ index 0000000..f606abb +#include "config.h" + +#include ++#include + ++#include +#include +#include +#include + ++#ifdef HAVE_ARPA_INET_H ++#include ++#endif ++#ifdef HAVE_WINSOCK2_H ++#include /* 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: "); ++ proto_item_append_text(ti, ""); + } + 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, ""); /* 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, ""); ++ 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: "); -+ 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 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?= 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 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?= 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 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 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 +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-0013-Initial-version-of-RT-C-P-dissector-hinting.patch b/wireshark-0013-Initial-version-of-RT-C-P-dissector-hinting.patch deleted file mode 100644 index d7244cc..0000000 --- a/wireshark-0013-Initial-version-of-RT-C-P-dissector-hinting.patch +++ /dev/null @@ -1,129 +0,0 @@ -From a507e19a98210dd7347acd0ffad901c915d09751 Mon Sep 17 00:00:00 2001 -From: Peter Lemenkov -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 - -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 -+#include - -+#include - #include - #include - #include - -+#ifdef HAVE_ARPA_INET_H -+#include -+#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"); - } - - /* 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 +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 +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 + +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 + #include + #include ++#include + + #ifdef HAVE_ARPA_INET_H + #include +@@ -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 - 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 - 1.10.3-4 - Updated RTPproxy dissector