aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-sdp.c
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2016-06-26 10:52:37 -0400
committerPascal Quantin <pascal.quantin@gmail.com>2016-06-27 15:20:06 +0000
commit2ab415579491e4bc66ea58627bda504cae833b9e (patch)
tree0f7f8eaa4bd9d90c8f6066036522ef0fc65d137d /epan/dissectors/packet-sdp.c
parent8c37621ca733a24a972e3e069a537c06e650f435 (diff)
tvb_get_string_enc + proto_tree_add_item = proto_tree_add_item_ret_string
Also some other tricks to remove unnecessary tvb_get_string_enc calls. Change-Id: I2f40d9175b6c0bb0b1364b4089bfaa287edf0914 Reviewed-on: https://code.wireshark.org/review/16158 Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Michael Mann <mmann78@netscape.net> Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-sdp.c')
-rw-r--r--epan/dissectors/packet-sdp.c124
1 files changed, 51 insertions, 73 deletions
diff --git a/epan/dissectors/packet-sdp.c b/epan/dissectors/packet-sdp.c
index 9d61558427..479b827ee5 100644
--- a/epan/dissectors/packet-sdp.c
+++ b/epan/dissectors/packet-sdp.c
@@ -246,13 +246,13 @@ typedef struct {
/* Data that is retrieved from a packet, but does not need to be kept */
typedef struct {
- char *connection_address; /* there should actually be SDP_MAX_RTP_CHANNELS of these too */
- char *connection_type;
+ char *connection_address; /* there should actually be SDP_MAX_RTP_CHANNELS of these too */
+ const guint8 *connection_type;
/* media_type is for 'audio', 'video', etc, so per-stream */
- char *media_type[SDP_MAX_RTP_CHANNELS];
- char *media_port[SDP_MAX_RTP_CHANNELS];
- char *media_proto[SDP_MAX_RTP_CHANNELS];
- guint8 media_count;
+ const guint8 *media_type[SDP_MAX_RTP_CHANNELS];
+ const guint8 *media_port[SDP_MAX_RTP_CHANNELS];
+ const guint8 *media_proto[SDP_MAX_RTP_CHANNELS];
+ guint8 media_count;
/* MSRP transport info (as set while parsing path attribute) */
gboolean msrp_transport_address_set;
@@ -544,13 +544,10 @@ dissect_sdp_connection_info(tvbuff_t *tvb, proto_item* ti,
return;
/* Save connection address type */
- media_info->connection_type = (char*)tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8|ENC_NA);
-
- DPRINT(("parsed connection line type=%s", media_info->connection_type));
-
- proto_tree_add_item(sdp_connection_info_tree,
+ proto_tree_add_item_ret_string(sdp_connection_info_tree,
hf_connection_info_address_type, tvb, offset, tokenlen,
- ENC_UTF_8|ENC_NA);
+ ENC_UTF_8|ENC_NA, wmem_packet_scope(), &media_info->connection_type);
+ DPRINT(("parsed connection line type=%s", media_info->connection_type));
offset = next_offset + 1;
/* Find the connection address */
@@ -751,15 +748,15 @@ static void dissect_sdp_encryption_key(tvbuff_t *tvb, proto_item * ti) {
}
static void dissect_key_mgmt(tvbuff_t *tvb, packet_info * pinfo, proto_item * ti) {
- gchar *data_p = NULL;
- gchar *prtcl_id = NULL;
- gint len;
- tvbuff_t *keymgmt_tvb;
- int found_match = 0;
- proto_tree *key_tree;
- gint next_offset;
- gint offset = 0;
- gint tokenlen;
+ gchar *data_p = NULL;
+ const guint8 *prtcl_id = NULL;
+ gint len;
+ tvbuff_t *keymgmt_tvb;
+ int found_match = 0;
+ proto_tree *key_tree;
+ gint next_offset;
+ gint offset = 0;
+ gint tokenlen;
key_tree = proto_item_add_subtree(ti, ett_sdp_key_mgmt);
@@ -767,9 +764,7 @@ static void dissect_key_mgmt(tvbuff_t *tvb, packet_info * pinfo, proto_item * ti
if (tokenlen == 0)
return;
- prtcl_id = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8|ENC_NA);
-
- proto_tree_add_item(key_tree, hf_key_mgmt_prtcl_id, tvb, offset, tokenlen, ENC_UTF_8|ENC_NA);
+ proto_tree_add_item_ret_string(key_tree, hf_key_mgmt_prtcl_id, tvb, offset, tokenlen, ENC_UTF_8|ENC_NA, wmem_packet_scope(), &prtcl_id);
offset = next_offset + 1;
@@ -801,9 +796,9 @@ static void dissect_key_mgmt(tvbuff_t *tvb, packet_info * pinfo, proto_item * ti
static void dissect_sdp_session_attribute(tvbuff_t *tvb, packet_info * pinfo, proto_item * ti) {
- proto_tree *sdp_session_attribute_tree;
- gint offset, next_offset, tokenlen;
- guint8 *field_name;
+ proto_tree *sdp_session_attribute_tree;
+ gint offset, next_offset, tokenlen;
+ const guint8 *field_name;
offset = 0;
@@ -817,10 +812,8 @@ static void dissect_sdp_session_attribute(tvbuff_t *tvb, packet_info * pinfo, pr
tokenlen = next_offset - offset;
- proto_tree_add_item(sdp_session_attribute_tree, hf_session_attribute_field,
- tvb, offset, tokenlen, ENC_UTF_8|ENC_NA);
-
- field_name = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8|ENC_NA);
+ proto_tree_add_item_ret_string(sdp_session_attribute_tree, hf_session_attribute_field,
+ tvb, offset, tokenlen, ENC_UTF_8|ENC_NA, wmem_packet_scope(), &field_name);
offset = next_offset + 1;
@@ -885,10 +878,8 @@ dissect_sdp_media(tvbuff_t *tvb, proto_item *ti,
return;
/* Type of media session */
- proto_tree_add_item(sdp_media_tree, hf_media_media, tvb, offset, tokenlen,
- ENC_UTF_8|ENC_NA);
-
- media_info->media_type[media_info->media_count] = (char*)tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8|ENC_NA);
+ proto_tree_add_item_ret_string(sdp_media_tree, hf_media_media, tvb, offset, tokenlen,
+ ENC_UTF_8|ENC_NA, wmem_packet_scope(), &media_info->media_type[media_info->media_count]);
DPRINT(("parsed media_type=%s, for media_count=%d",
media_info->media_type[media_info->media_count],
@@ -905,14 +896,11 @@ dissect_sdp_media(tvbuff_t *tvb, proto_item *ti,
if (next_offset != -1) {
tokenlen = next_offset - offset;
/* Save port info */
- media_info->media_port[media_info->media_count] = (char*)tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8|ENC_NA);
-
+ it = proto_tree_add_item_ret_string(sdp_media_tree, hf_media_port_string, tvb, offset, tokenlen,
+ ENC_UTF_8|ENC_NA, wmem_packet_scope(), &media_info->media_port[media_info->media_count]);
DPRINT(("parsed media_port=%s, for media_count=%d",
media_info->media_port[media_info->media_count],
media_info->media_count));
-
- it = proto_tree_add_string(sdp_media_tree, hf_media_port_string, tvb, offset, tokenlen,
- media_info->media_port[media_info->media_count]);
if (g_ascii_isdigit(media_info->media_port[media_info->media_count][0])) {
PROTO_ITEM_SET_HIDDEN(it);
proto_tree_add_uint(sdp_media_tree, hf_media_port, tvb, offset, tokenlen,
@@ -935,13 +923,11 @@ dissect_sdp_media(tvbuff_t *tvb, proto_item *ti,
return;
/* Save port info */
- media_info->media_port[media_info->media_count] = (char*)tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8|ENC_NA);
+ it = proto_tree_add_item_ret_string(sdp_media_tree, hf_media_port_string, tvb, offset, tokenlen,
+ ENC_UTF_8|ENC_NA, wmem_packet_scope(), &media_info->media_port[media_info->media_count]);
DPRINT(("parsed media_port=%s, for media_count=%d",
media_info->media_port[media_info->media_count],
media_info->media_count));
- /* XXX Remember Port */
- it = proto_tree_add_string(sdp_media_tree, hf_media_port_string, tvb, offset, tokenlen,
- media_info->media_port[media_info->media_count]);
if (g_ascii_isdigit(media_info->media_port[media_info->media_count][0])) {
PROTO_ITEM_SET_HIDDEN(it);
proto_tree_add_uint(sdp_media_tree, hf_media_port, tvb, offset, tokenlen,
@@ -955,16 +941,12 @@ dissect_sdp_media(tvbuff_t *tvb, proto_item *ti,
return;
/* Save port protocol */
- media_info->media_proto[media_info->media_count] = (char*)tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8|ENC_NA);
-
+ proto_tree_add_item_ret_string(sdp_media_tree, hf_media_proto, tvb, offset, tokenlen,
+ ENC_UTF_8|ENC_NA, wmem_packet_scope(), &media_info->media_proto[media_info->media_count]);
DPRINT(("parsed media_proto=%s, for media_count=%d",
media_info->media_proto[media_info->media_count],
media_info->media_count));
- /* XXX Remember Protocol */
- proto_tree_add_item(sdp_media_tree, hf_media_proto, tvb, offset, tokenlen,
- ENC_UTF_8|ENC_NA);
-
do {
offset = next_offset + 1;
tokenlen = find_next_optional_token_in_line(tvb, sdp_media_tree,
@@ -1245,7 +1227,7 @@ decode_sdp_fmtp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint offset
takes place. A comma is used to separate any
pair of parameter sets in the list.
*/
- gchar *data_p = NULL;
+ const guint8 *data_p = NULL;
gint comma_offset;
@@ -1258,8 +1240,7 @@ decode_sdp_fmtp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint offset
tokenlen = end_offset - offset;
}
- data_p = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8|ENC_NA);
- proto_tree_add_string(tree, hf_sdp_nal_unit_1_string, tvb, offset, tokenlen, data_p);
+ proto_tree_add_item_ret_string(tree, hf_sdp_nal_unit_1_string, tvb, offset, tokenlen, ENC_UTF_8|ENC_NA, wmem_packet_scope(), &data_p);
data_tvb = base64_to_tvb(tvb, data_p);
add_new_data_source(pinfo, data_tvb, "h264 prop-parameter-sets");
@@ -1276,8 +1257,7 @@ decode_sdp_fmtp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint offset
/* Second NAL unit */
offset = comma_offset +1;
tokenlen = end_offset - offset;
- data_p = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8|ENC_NA);
- proto_tree_add_string(tree, hf_sdp_nal_unit_2_string, tvb, offset, tokenlen, data_p);
+ proto_tree_add_item_ret_string(tree, hf_sdp_nal_unit_2_string, tvb, offset, tokenlen, ENC_UTF_8|ENC_NA, wmem_packet_scope(), &data_p);
data_tvb = base64_to_tvb(tvb, data_p);
add_new_data_source(pinfo, data_tvb, "h264 prop-parameter-sets 2");
dissect_h264_nal_unit(data_tvb, pinfo, tree);
@@ -1324,20 +1304,20 @@ static gint find_sdp_media_attribute_names(tvbuff_t *tvb, int offset, guint len)
static void dissect_sdp_media_attribute(tvbuff_t *tvb, packet_info *pinfo, proto_item * ti, int length,
transport_info_t *transport_info, disposable_media_info_t *media_info) {
- proto_tree *sdp_media_attribute_tree, *parameter_item;
- proto_item *fmtp_item, *media_format_item, *parameter_tree;
- proto_tree *fmtp_tree;
- gint offset, next_offset, tokenlen, n, colon_offset;
- /*??guint8 *field_name;*/
- guint8 *payload_type;
- guint8 *attribute_value;
- guint8 pt;
- gint sdp_media_attrbute_code;
- const char *msrp_res = "msrp://";
- const char *h324ext_h223lcparm = "h324ext/h223lcparm";
- gboolean has_more_pars = TRUE;
- tvbuff_t *h245_tvb;
- guint8 master_key_length = 0, master_salt_length = 0;
+ proto_tree *sdp_media_attribute_tree, *parameter_item;
+ proto_item *fmtp_item, *media_format_item, *parameter_tree;
+ proto_tree *fmtp_tree;
+ gint offset, next_offset, tokenlen, n, colon_offset;
+ /*??guint8 *field_name;*/
+ const guint8 *payload_type;
+ guint8 *attribute_value;
+ guint8 pt;
+ gint sdp_media_attrbute_code;
+ const char *msrp_res = "msrp://";
+ const char *h324ext_h223lcparm = "h324ext/h223lcparm";
+ gboolean has_more_pars = TRUE;
+ tvbuff_t *h245_tvb;
+ guint8 master_key_length = 0, master_salt_length = 0;
offset = 0;
@@ -1381,10 +1361,8 @@ static void dissect_sdp_media_attribute(tvbuff_t *tvb, packet_info *pinfo, proto
tokenlen = next_offset - offset;
- proto_tree_add_item(sdp_media_attribute_tree, hf_media_format, tvb,
- offset, tokenlen, ENC_UTF_8|ENC_NA);
-
- payload_type = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8|ENC_NA);
+ proto_tree_add_item_ret_string(sdp_media_attribute_tree, hf_media_format, tvb,
+ offset, tokenlen, ENC_UTF_8|ENC_NA, wmem_packet_scope(), &payload_type);
offset = next_offset + 1;