aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-sdp.c
diff options
context:
space:
mode:
authorAndersBroman <anders.broman@ericsson.com>2014-03-28 14:57:24 +0100
committerAnders Broman <a.broman58@gmail.com>2014-03-28 14:05:29 +0000
commitf7c62543f97260654b28381e7a082dcefa56bf68 (patch)
tree6a5e93de81265566fe9ad5600db913236a786286 /epan/dissectors/packet-sdp.c
parent3438243c1e976374314a5377237fa352bf5247e7 (diff)
tvb_get_ascii_string is really expensive. On a large capture file which I
profiled in october Fetch cost has gone from 15,6M to 24,2M, changing tvb_get_string() to tvb_get_string_enc() with ENC_UTF_8 where it seems safe helps a bit and should be done any way. Change-Id: I4d3e640bfde3304a991c09e2a30ad7dd132fc5ac Reviewed-on: https://code.wireshark.org/review/855 Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-sdp.c')
-rw-r--r--epan/dissectors/packet-sdp.c64
1 files changed, 32 insertions, 32 deletions
diff --git a/epan/dissectors/packet-sdp.c b/epan/dissectors/packet-sdp.c
index 8e71f6a32b..9569b6e815 100644
--- a/epan/dissectors/packet-sdp.c
+++ b/epan/dissectors/packet-sdp.c
@@ -506,7 +506,7 @@ dissect_sdp_connection_info(tvbuff_t *tvb, proto_item* ti,
return;
tokenlen = next_offset - offset;
/* Save connection address type */
- media_info->connection_type = (char*)tvb_get_string(wmem_packet_scope(), tvb, offset, tokenlen);
+ media_info->connection_type = (char*)tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8);
DPRINT(("parsed connection line type=%s", media_info->connection_type));
@@ -522,11 +522,11 @@ dissect_sdp_connection_info(tvbuff_t *tvb, proto_item* ti,
tokenlen = -1; /* end of tvbuff */
/* Save connection address */
media_info->connection_address =
- (char*)tvb_get_string(wmem_packet_scope(), tvb, offset, tvb_length_remaining(tvb, offset));
+ (char*)tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tvb_length_remaining(tvb, offset), ENC_UTF_8);
} else {
tokenlen = next_offset - offset;
/* Save connection address */
- media_info->connection_address = (char*)tvb_get_string(wmem_packet_scope(), tvb, offset, tokenlen);
+ media_info->connection_address = (char*)tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8);
}
DPRINT(("parsed connection line address=%s", media_info->connection_address));
@@ -734,7 +734,7 @@ static void dissect_key_mgmt(tvbuff_t *tvb, packet_info * pinfo, proto_item * ti
return;
tokenlen = next_offset - offset;
- prtcl_id = tvb_get_string(wmem_packet_scope(), tvb, offset, tokenlen);
+ prtcl_id = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8);
proto_tree_add_item(key_tree, hf_key_mgmt_prtcl_id, tvb, offset, tokenlen, ENC_ASCII|ENC_NA);
@@ -744,7 +744,7 @@ static void dissect_key_mgmt(tvbuff_t *tvb, packet_info * pinfo, proto_item * ti
if (len < 0)
return;
- data_p = tvb_get_string(wmem_packet_scope(), tvb, offset, len);
+ data_p = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, len, ENC_UTF_8);
keymgmt_tvb = base64_to_tvb(tvb, data_p);
add_new_data_source(pinfo, keymgmt_tvb, "Key Management Data");
@@ -787,7 +787,7 @@ static void dissect_sdp_session_attribute(tvbuff_t *tvb, packet_info * pinfo, pr
proto_tree_add_item(sdp_session_attribute_tree, hf_session_attribute_field,
tvb, offset, tokenlen, ENC_ASCII|ENC_NA);
- field_name = tvb_get_string(wmem_packet_scope(), tvb, offset, tokenlen);
+ field_name = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8);
offset = next_offset + 1;
@@ -856,7 +856,7 @@ dissect_sdp_media(tvbuff_t *tvb, proto_item *ti,
proto_tree_add_item(sdp_media_tree, hf_media_media, tvb, offset, tokenlen,
ENC_ASCII|ENC_NA);
- media_info->media_type[media_info->media_count] = (char*)tvb_get_string(wmem_packet_scope(), tvb, offset, tokenlen);
+ media_info->media_type[media_info->media_count] = (char*)tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8);
DPRINT(("parsed media_type=%s, for media_count=%d",
media_info->media_type[media_info->media_count],
@@ -873,14 +873,14 @@ 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(wmem_packet_scope(), tvb, offset, tokenlen);
+ media_info->media_port[media_info->media_count] = (char*)tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8);
DPRINT(("parsed media_port=%s, for media_count=%d",
media_info->media_port[media_info->media_count],
media_info->media_count));
proto_tree_add_uint(sdp_media_tree, hf_media_port, tvb, offset, tokenlen,
- atoi((char*)tvb_get_string(wmem_packet_scope(), tvb, offset, tokenlen)));
+ atoi((char*)tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8)));
offset = next_offset + 1;
next_offset = tvb_find_guint8(tvb, offset, -1, ' ');
if (next_offset == -1)
@@ -896,13 +896,13 @@ dissect_sdp_media(tvbuff_t *tvb, proto_item *ti,
return;
tokenlen = next_offset - offset;
/* Save port info */
- media_info->media_port[media_info->media_count] = (char*)tvb_get_string(wmem_packet_scope(), tvb, offset, tokenlen);
+ media_info->media_port[media_info->media_count] = (char*)tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8);
DPRINT(("parsed media_port=%s, for media_count=%d",
media_info->media_port[media_info->media_count],
media_info->media_count));
/* XXX Remember Port */
proto_tree_add_uint(sdp_media_tree, hf_media_port, tvb, offset, tokenlen,
- atoi((char*)tvb_get_string(wmem_packet_scope(), tvb, offset, tokenlen)));
+ atoi((char*)tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8)));
offset = next_offset + 1;
}
@@ -913,7 +913,7 @@ dissect_sdp_media(tvbuff_t *tvb, proto_item *ti,
tokenlen = next_offset - offset;
/* Save port protocol */
- media_info->media_proto[media_info->media_count] = (char*)tvb_get_string(wmem_packet_scope(), tvb, offset, tokenlen);
+ media_info->media_proto[media_info->media_count] = (char*)tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8);
DPRINT(("parsed media_proto=%s, for media_count=%d",
media_info->media_proto[media_info->media_count],
@@ -936,7 +936,7 @@ dissect_sdp_media(tvbuff_t *tvb, proto_item *ti,
}
if (!strcmp(media_info->media_proto[media_info->media_count], "RTP/AVP")) {
- media_format = tvb_get_string(wmem_packet_scope(), tvb, offset, tokenlen);
+ media_format = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8);
proto_tree_add_string(sdp_media_tree, hf_media_format, tvb, offset,
tokenlen, val_to_str_ext((guint32)strtoul((char*)media_format, NULL, 10), &rtp_payload_type_vals_ext, "%u"));
idx = transport_info->media[transport_info->media_count].pt_count;
@@ -1104,7 +1104,7 @@ decode_sdp_fmtp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint offset
/* Find the name of the parameter */
tokenlen = next_offset - offset;
- field_name = tvb_get_string(wmem_packet_scope(), tvb, offset, tokenlen);
+ field_name = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8);
#if 0
proto_tree_add_text(tree, tvb, offset, tokenlen, "Debug; MIMEtype '%s'Parameter name: '%s'", mime_type, field_name); */
#endif
@@ -1115,14 +1115,14 @@ decode_sdp_fmtp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint offset
if (strcmp((char*)field_name, "profile-level-id") == 0) {
offset++;
tokenlen = end_offset - offset;
- format_specific_parameter = tvb_get_string(wmem_packet_scope(), tvb, offset, tokenlen);
+ format_specific_parameter = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8);
item = proto_tree_add_uint(tree, hf_sdp_fmtp_mpeg4_profile_level_id, tvb, offset, tokenlen,
(guint32)strtol((char*)format_specific_parameter, NULL, 10));
PROTO_ITEM_SET_GENERATED(item);
} else if (strcmp((char*)field_name, "config") == 0) {
/* String including "=" */
tokenlen = end_offset - offset;
- format_specific_parameter = tvb_get_string(wmem_packet_scope(), tvb, offset, tokenlen);
+ format_specific_parameter = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8);
/* ascii_bytes_to_tvb requires the "=" to be in the buffer */
data_tvb = ascii_bytes_to_tvb(tvb, pinfo, tokenlen, format_specific_parameter);
if (mp4ves_handle && data_tvb) {
@@ -1137,14 +1137,14 @@ decode_sdp_fmtp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint offset
if (strcmp((char*)field_name, "profile") == 0) {
offset++;
tokenlen = end_offset - offset;
- format_specific_parameter = tvb_get_string(wmem_packet_scope(), tvb, offset, tokenlen);
+ format_specific_parameter = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8);
item = proto_tree_add_uint(tree, hf_sdp_fmtp_h263_profile, tvb, offset, tokenlen,
(guint32)strtol((char*)format_specific_parameter, NULL, 10));
PROTO_ITEM_SET_GENERATED(item);
} else if (strcmp((char*)field_name, "level") == 0) {
offset++;
tokenlen = end_offset - offset;
- format_specific_parameter = tvb_get_string(wmem_packet_scope(), tvb, offset, tokenlen);
+ format_specific_parameter = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8);
item = proto_tree_add_uint(tree, hf_sdp_fmtp_h263_level, tvb, offset, tokenlen,
(guint32)strtol((char*)format_specific_parameter, NULL, 10));
PROTO_ITEM_SET_GENERATED(item);
@@ -1170,7 +1170,7 @@ decode_sdp_fmtp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint offset
/* Length includes "=" as it's required by ascii_bytes_to_tvb()*/
tokenlen = end_offset - offset;
- format_specific_parameter = tvb_get_string(wmem_packet_scope(), tvb, offset, tokenlen);
+ format_specific_parameter = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8);
data_tvb = ascii_bytes_to_tvb(tvb, pinfo, tokenlen, format_specific_parameter);
if (!data_tvb) {
proto_tree_add_text(tree, tvb, offset, tokenlen, "Could not convert '%s' to 3 bytes", format_specific_parameter);
@@ -1188,7 +1188,7 @@ decode_sdp_fmtp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint offset
} else if (strcmp(field_name, "packetization-mode") == 0) {
offset++;
tokenlen = end_offset - offset;
- format_specific_parameter = tvb_get_string(wmem_packet_scope(), tvb, offset, tokenlen);
+ format_specific_parameter = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8);
item = proto_tree_add_uint(tree, hf_sdp_h264_packetization_mode, tvb, offset, tokenlen,
(guint32)strtol((char*)format_specific_parameter, NULL, 10));
PROTO_ITEM_SET_GENERATED(item);
@@ -1215,7 +1215,7 @@ decode_sdp_fmtp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint offset
tokenlen = end_offset - offset;
}
- data_p = tvb_get_string(wmem_packet_scope(), tvb, offset, tokenlen);
+ data_p = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8);
proto_tree_add_text(tree, tvb, offset, tokenlen, "NAL unit 1 string: %s", data_p);
/* proto_tree_add_text(tree, tvb, offset, tokenlen, "String %s", data_p); */
@@ -1234,7 +1234,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(wmem_packet_scope(), tvb, offset, tokenlen);
+ data_p = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8);
proto_tree_add_text(tree, tvb, offset, tokenlen, "NAL unit 2 string: %s", data_p);
data_tvb = base64_to_tvb(tvb, data_p);
add_new_data_source(pinfo, data_tvb, "h264 prop-parameter-sets 2");
@@ -1324,7 +1324,7 @@ static void dissect_sdp_media_attribute(tvbuff_t *tvb, packet_info *pinfo, proto
offset = tvb_skip_wsp(tvb, offset, tvb_length_remaining(tvb, offset));
/* Value is the remainder of the line */
- attribute_value = tvb_get_string(wmem_packet_scope(), tvb, offset, tvb_length_remaining(tvb, offset));
+ attribute_value = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tvb_length_remaining(tvb, offset), ENC_UTF_8);
@@ -1344,7 +1344,7 @@ static void dissect_sdp_media_attribute(tvbuff_t *tvb, packet_info *pinfo, proto
proto_tree_add_item(sdp_media_attribute_tree, hf_media_format, tvb,
offset, tokenlen, ENC_ASCII|ENC_NA);
- payload_type = tvb_get_string(wmem_packet_scope(), tvb, offset, tokenlen);
+ payload_type = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8);
offset = next_offset + 1;
@@ -1367,7 +1367,7 @@ static void dissect_sdp_media_attribute(tvbuff_t *tvb, packet_info *pinfo, proto
key = wmem_new(wmem_file_scope(), gint);
*key = (gint)strtol((char*)payload_type, NULL, 10);
- transport_info->encoding_name[pt] = (char*)tvb_get_string(wmem_packet_scope(), tvb, offset, tokenlen);
+ transport_info->encoding_name[pt] = (char*)tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8);
next_offset = next_offset + 1;
offset = next_offset;
@@ -1379,7 +1379,7 @@ 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_sample_rate, tvb,
offset, tokenlen, ENC_ASCII|ENC_NA);
- transport_info->sample_rate[pt] = atoi(tvb_get_string(wmem_packet_scope(), tvb, offset, tokenlen));
+ transport_info->sample_rate[pt] = atoi(tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8));
/* As per RFC2327 it is possible to have multiple Media Descriptions ("m=").
For example:
@@ -1442,7 +1442,7 @@ static void dissect_sdp_media_attribute(tvbuff_t *tvb, packet_info *pinfo, proto
media_format_item = proto_tree_add_item(sdp_media_attribute_tree,
hf_media_format, tvb, offset,
tokenlen, ENC_ASCII|ENC_NA);
- media_format = atoi((char*)tvb_get_string(wmem_packet_scope(), tvb, offset, tokenlen));
+ media_format = atoi((char*)tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8));
if (media_format >= SDP_NO_OF_PT) {
return; /* Invalid */
}
@@ -1517,10 +1517,10 @@ static void dissect_sdp_media_attribute(tvbuff_t *tvb, packet_info *pinfo, proto
port_end_offset = tvb_find_guint8(tvb, port_offset, -1, ';');
}
/* Attempt to convert address */
- if (str_to_ip((char*)tvb_get_string(wmem_packet_scope(), tvb, address_offset, port_offset-address_offset),
+ if (str_to_ip((char*)tvb_get_string_enc(wmem_packet_scope(), tvb, address_offset, port_offset-address_offset, ENC_UTF_8),
&media_info->msrp_ipaddr)) {
/* Get port number */
- media_info->msrp_port_number = atoi((char*)tvb_get_string(wmem_packet_scope(), tvb, port_offset + 1, port_end_offset - port_offset - 1));
+ media_info->msrp_port_number = atoi((char*)tvb_get_string_enc(wmem_packet_scope(), tvb, port_offset + 1, port_end_offset - port_offset - 1, ENC_UTF_8));
/* Set flag so this info can be used */
media_info->msrp_transport_address_set = TRUE;
}
@@ -1586,7 +1586,7 @@ static void dissect_sdp_media_attribute(tvbuff_t *tvb, packet_info *pinfo, proto
}
tokenlen = next_offset - offset;
proto_tree_add_uint(sdp_media_attribute_tree, hf_sdp_crypto_tag, tvb, offset, tokenlen,
- atoi((char*)tvb_get_string(wmem_packet_scope(), tvb, offset, tokenlen)));
+ atoi((char*)tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8)));
offset = next_offset + 1;
/* crypto-suite */
@@ -1663,7 +1663,7 @@ static void dissect_sdp_media_attribute(tvbuff_t *tvb, packet_info *pinfo, proto
} else {
tokenlen = next_offset - offset;
}
- data_p = tvb_get_string(wmem_packet_scope(), tvb, offset, tokenlen);
+ data_p = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8);
key_salt_tvb = base64_to_tvb(tvb, data_p);
add_new_data_source(pinfo, key_salt_tvb, "Key_Salt_tvb");
if (master_key_length != 0) {
@@ -1712,7 +1712,7 @@ static void dissect_sdp_media_attribute(tvbuff_t *tvb, packet_info *pinfo, proto
/* This will not work if more than one parameter */
/* number of octets used for the MKI in the RTP payload */
- transport_info->mki_len = atoi((char*)tvb_get_string(wmem_packet_scope(), tvb, offset, tokenlen));
+ transport_info->mki_len = atoi((char*)tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8));
proto_tree_add_item(parameter_tree, hf_sdp_crypto_mki_length,
tvb, offset, tokenlen, ENC_ASCII|ENC_NA);
}