diff options
author | AndersBroman <anders.broman@ericsson.com> | 2014-03-28 14:57:24 +0100 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2014-03-28 14:05:29 +0000 |
commit | f7c62543f97260654b28381e7a082dcefa56bf68 (patch) | |
tree | 6a5e93de81265566fe9ad5600db913236a786286 /epan/dissectors/packet-sip.c | |
parent | 3438243c1e976374314a5377237fa352bf5247e7 (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-sip.c')
-rw-r--r-- | epan/dissectors/packet-sip.c | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/epan/dissectors/packet-sip.c b/epan/dissectors/packet-sip.c index 1587c2378a..181b5b0a7d 100644 --- a/epan/dissectors/packet-sip.c +++ b/epan/dissectors/packet-sip.c @@ -1712,7 +1712,7 @@ dissect_sip_authorization_item(tvbuff_t *tvb, proto_tree *tree, gint start_offse par_name_end_offset = tvb_skip_wsp_return(tvb,par_name_end_offset); /* Extract the parameter name */ - name = tvb_get_string(wmem_packet_scope(), tvb, start_offset, par_name_end_offset-start_offset); + name = tvb_get_string_enc(wmem_packet_scope(), tvb, start_offset, par_name_end_offset-start_offset, ENC_UTF_8); /* Find end of parameter, it can be a quoted string so check for quoutes too */ queried_offset = par_name_end_offset; @@ -1801,13 +1801,13 @@ dissect_sip_reason_header(tvbuff_t *tvb, proto_tree *tree, gint start_offset, gi proto_tree_add_text(tree, tvb, start_offset, length, "Reason Protocols: %s", tvb_format_text(tvb, start_offset, length)); - param_name = tvb_get_string(wmem_packet_scope(), tvb, start_offset, length); + param_name = tvb_get_string_enc(wmem_packet_scope(), tvb, start_offset, length, ENC_UTF_8); if (g_ascii_strcasecmp(param_name, "Q.850") == 0){ current_offset = tvb_find_guint8(tvb, semi_colon_offset, line_end_offset-semi_colon_offset, '=')+1; length = line_end_offset - current_offset; /* q850_cause_code_vals */ - cause_value = (guint)strtoul(tvb_get_string(wmem_packet_scope(), tvb, current_offset, length), NULL, 10); + cause_value = (guint)strtoul(tvb_get_string_enc(wmem_packet_scope(), tvb, current_offset, length, ENC_UTF_8), NULL, 10); proto_tree_add_text(tree, tvb, current_offset, length, "Cause: %u(0x%x)[%s]", cause_value,cause_value, val_to_str_ext(cause_value, &q850_cause_code_vals_ext, "Unknown (%d)" )); @@ -1877,7 +1877,7 @@ dissect_sip_sec_mechanism(tvbuff_t *tvb, packet_info* pinfo, proto_tree *tree, g /* Has value part */ par_name_end_offset = equals_offset; /* Extract the parameter name */ - param_name = tvb_get_string(wmem_packet_scope(), tvb, current_offset, par_name_end_offset-current_offset); + param_name = tvb_get_string_enc(wmem_packet_scope(), tvb, current_offset, par_name_end_offset-current_offset, ENC_UTF_8); /* Extract the value */ value = tvb_get_string(wmem_packet_scope(), tvb, equals_offset+1, semi_colon_offset-equals_offset+1); } @@ -2098,8 +2098,8 @@ static void dissect_sip_via_header(tvbuff_t *tvb, proto_tree *tree, gint start_o /* Add address port number to tree */ proto_tree_add_uint(tree, hf_sip_via_sent_by_port, tvb, port_offset, current_offset - port_offset, - atoi(tvb_get_string(wmem_packet_scope(), tvb, port_offset, - current_offset - port_offset))); + atoi(tvb_get_string_enc(wmem_packet_scope(), tvb, port_offset, + current_offset - port_offset, ENC_UTF_8))); } else { @@ -2185,8 +2185,8 @@ static void dissect_sip_via_header(tvbuff_t *tvb, proto_tree *tree, gint start_o } /* Note parameter name */ - param_name = tvb_get_string(wmem_packet_scope(), tvb, semicolon_offset+1, - parameter_name_end - semicolon_offset - 1); + param_name = tvb_get_string_enc(wmem_packet_scope(), tvb, semicolon_offset+1, + parameter_name_end - semicolon_offset - 1, ENC_UTF_8); /* Try to add parameter as a filterable item */ for (via_parameter = &via_parameters_hf_array[i]; @@ -2566,7 +2566,7 @@ dissect_sip_common(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tr } } else { header_len = colon_offset - offset; - header_name = (gchar*)tvb_get_string(wmem_packet_scope(), tvb, offset, header_len); + header_name = (gchar*)tvb_get_string_enc(wmem_packet_scope(), tvb, offset, header_len, ENC_UTF_8); ascii_strdown_inplace(header_name); hf_index = sip_is_known_sip_header(header_name, header_len); @@ -3071,11 +3071,11 @@ dissect_sip_common(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tr content_type_end = tvb_skip_wsp_return(tvb, semi_colon_offset-1); content_type_len = content_type_end - value_offset; content_type_parameter_str_len = value_offset + value_len - parameter_offset; - content_type_parameter_str = tvb_get_string(wmem_packet_scope(), tvb, parameter_offset, - content_type_parameter_str_len); + content_type_parameter_str = tvb_get_string_enc(wmem_packet_scope(), tvb, parameter_offset, + content_type_parameter_str_len, ENC_UTF_8); } media_type_str_lower_case = ascii_strdown_inplace( - (gchar *)tvb_get_string(wmem_packet_scope(), tvb, value_offset, content_type_len)); + (gchar *)tvb_get_string_enc(wmem_packet_scope(), tvb, value_offset, content_type_len, ENC_UTF_8)); /* Debug code proto_tree_add_text(hdr_tree, tvb, value_offset,content_type_len, @@ -3284,8 +3284,8 @@ dissect_sip_common(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tr value, "%s", tvb_format_text(tvb, offset, linelen)); - content_encoding_parameter_str = ascii_strdown_inplace(tvb_get_string(wmem_packet_scope(), tvb, value_offset, - (line_end_offset-value_offset))); + content_encoding_parameter_str = ascii_strdown_inplace(tvb_get_string_enc(wmem_packet_scope(), tvb, value_offset, + (line_end_offset-value_offset), ENC_UTF_8)); break; case POS_SECURITY_CLIENT: /* security-client = "Security-Client" HCOLON @@ -3679,7 +3679,7 @@ dfilter_sip_request_line(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gi */ /* get method string*/ - value = tvb_get_string(wmem_packet_scope(), tvb, offset, parameter_len); + value = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, parameter_len, ENC_UTF_8); /* Copy request method for telling tap */ stat_info->request_method = value; @@ -3711,7 +3711,7 @@ dfilter_sip_status_line(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gin * We also know that we have a version string followed by a * space at the beginning of the line, for the same reason. */ - response_code = atoi((char*)tvb_get_string(wmem_packet_scope(), tvb, offset + SIP2_HDR_LEN + 1, 3)); + response_code = atoi((char*)tvb_get_string_enc(wmem_packet_scope(), tvb, offset + SIP2_HDR_LEN + 1, 3, ENC_UTF_8)); /* Add numerical response code to tree */ if (tree) { @@ -3872,7 +3872,7 @@ static gboolean sip_is_known_request(tvbuff_t *tvb, int meth_offset, guint i; gchar *meth_name; - meth_name = tvb_get_string(wmem_packet_scope(), tvb, meth_offset, meth_len); + meth_name = tvb_get_string_enc(wmem_packet_scope(), tvb, meth_offset, meth_len, ENC_UTF_8); for (i = 1; i < array_length(sip_methods); i++) { if (meth_len == strlen(sip_methods[i]) && |