aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-rtpproxy.c
diff options
context:
space:
mode:
authorPeter Lemenkov <lemenkov@gmail.com>2014-02-20 15:50:09 +0400
committerEvan Huus <eapache@gmail.com>2014-02-20 22:04:57 +0000
commit4c100fed02affaf05f8368b3d02bd251e7b28b15 (patch)
tree7c5af10712811cf568fdb608128c7ccc39959505 /epan/dissectors/packet-rtpproxy.c
parentb14cf15010ed85dd25f15b2c0770cb7c2e14e4db (diff)
Initial basic RTPproxy-ng dissector
Initial basic RTPproxy-ng dissector which uses bencode packing. Change-Id: I5b3e9f6e745977b3df12263c3a9f4ee9a3e1445e Signed-off-by: Peter Lemenkov <lemenkov@gmail.com> Reviewed-on: https://code.wireshark.org/review/268 Reviewed-by: Evan Huus <eapache@gmail.com> Tested-by: Evan Huus <eapache@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-rtpproxy.c')
-rw-r--r--epan/dissectors/packet-rtpproxy.c32
1 files changed, 31 insertions, 1 deletions
diff --git a/epan/dissectors/packet-rtpproxy.c b/epan/dissectors/packet-rtpproxy.c
index 079bda2577..dbbd9bf9a4 100644
--- a/epan/dissectors/packet-rtpproxy.c
+++ b/epan/dissectors/packet-rtpproxy.c
@@ -85,6 +85,7 @@ static int hf_rtpproxy_mediaid = -1;
static int hf_rtpproxy_reply = -1;
static int hf_rtpproxy_version_request = -1;
static int hf_rtpproxy_version_supported = -1;
+static int hf_rtpproxy_ng_bencode = -1;
/* Expert fields */
static expert_field ei_rtpproxy_timeout = EI_INIT;
@@ -107,6 +108,7 @@ typedef struct _rtpproxy_info {
static dissector_handle_t rtcp_handle;
static dissector_handle_t rtp_events_handle;
static dissector_handle_t rtp_handle;
+static dissector_handle_t bencode_handle;
typedef struct _rtpproxy_conv_info {
wmem_tree_t *trans;
@@ -246,6 +248,8 @@ static gint ett_rtpproxy_notify = -1;
static gint ett_rtpproxy_reply = -1;
+static gint ett_rtpproxy_ng_bencode = -1;
+
/* Default values */
static guint rtpproxy_tcp_port = 22222;
static guint rtpproxy_udp_port = 22222;
@@ -497,6 +501,7 @@ dissect_rtpproxy(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data
gint offset = 0;
gint new_offset = 0;
guint tmp;
+ guint tmp2;
gint realsize = 0;
guint8* rawstr;
guint8* tmpstr;
@@ -511,6 +516,7 @@ dissect_rtpproxy(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data
guint16 port;
guint32 ipaddr[4]; /* Enough room for IPv4 or IPv6 */
rtpproxy_info_t *rtpproxy_info = NULL;
+ tvbuff_t *subtvb;
/* If it does not start with a printable character it's not RTPProxy */
if(!isprint(tvb_get_guint8(tvb, 0)))
@@ -581,6 +587,15 @@ dissect_rtpproxy(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data
case 'u':
case 'l':
case 'd':
+ tmp2 = tvb_get_guint8(tvb, offset+1);
+ if(('1' <= tmp2) && (tmp2 <= '9') && (tvb_get_guint8(tvb, offset+2) == ':')){
+ col_add_fstr(pinfo->cinfo, COL_INFO, "RTPproxy-ng: %s", rawstr);
+ ti = proto_tree_add_item(rtpproxy_tree, hf_rtpproxy_ng_bencode, tvb, offset, -1, ENC_ASCII | ENC_NA);
+ rtpproxy_tree = proto_item_add_subtree(ti, ett_rtpproxy_ng_bencode);
+ subtvb = tvb_new_subset(tvb, offset, -1, -1);
+ call_dissector(bencode_handle, subtvb, pinfo, rtpproxy_tree);
+ break;
+ }
case 'p':
case 'v':
case 'r':
@@ -1319,6 +1334,19 @@ proto_register_rtpproxy(void)
"The time between the Request and the Reply",
HFILL
}
+ },
+ {
+ &hf_rtpproxy_ng_bencode,
+ {
+ "RTPproxy-ng bencode packet",
+ "rtpproxy.ng.bencode",
+ FT_STRING,
+ BASE_NONE,
+ NULL,
+ 0x0,
+ "Serialized structure of integers, dictionaries, strings and lists.",
+ HFILL
+ }
}
};
@@ -1346,7 +1374,8 @@ proto_register_rtpproxy(void)
&ett_rtpproxy_command_parameters_acc,
&ett_rtpproxy_tag,
&ett_rtpproxy_notify,
- &ett_rtpproxy_reply
+ &ett_rtpproxy_reply,
+ &ett_rtpproxy_ng_bencode
};
proto_rtpproxy = proto_register_protocol (
@@ -1421,6 +1450,7 @@ proto_reg_handoff_rtpproxy(void)
rtcp_handle = find_dissector("rtcp");
rtp_events_handle = find_dissector("rtpevent");
rtp_handle = find_dissector("rtp");
+ bencode_handle = find_dissector("bencode");
/* Calculate nstime_t struct for the timeout from the rtpproxy_timeout value in milliseconds */
rtpproxy_timeout_ns.secs = (rtpproxy_timeout - rtpproxy_timeout % 1000) / 1000;