This is an automated email from the ASF dual-hosted git repository.
bcall pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficserver.git
The following commit(s) were added to refs/heads/master by this push:
new f4944ee MIME: Update MIMEField::name_get and MIMEField::value_get to
return string_view.
f4944ee is described below
commit f4944ee494316245da5bc1decffbf0af87f991e4
Author: Alan M. Carroll <[email protected]>
AuthorDate: Thu Jan 17 10:21:44 2019 -0600
MIME: Update MIMEField::name_get and MIMEField::value_get to return
string_view.
---
proxy/hdrs/MIME.cc | 65 ++++++++++++++++++--------------------------
proxy/hdrs/MIME.h | 28 +++++++++++--------
src/traffic_server/InkAPI.cc | 6 ++--
3 files changed, 46 insertions(+), 53 deletions(-)
diff --git a/proxy/hdrs/MIME.cc b/proxy/hdrs/MIME.cc
index c2a22c8..33ab602 100644
--- a/proxy/hdrs/MIME.cc
+++ b/proxy/hdrs/MIME.cc
@@ -1476,9 +1476,8 @@ mime_hdr_field_attach(MIMEHdrImpl *mh, MIMEField *field,
int check_for_dups, MIM
//////////////////////////////////////////////////
if (check_for_dups || (prev_dup && (!prev_dup->is_dup_head()))) {
- int length;
- const char *name = mime_field_name_get(field, &length);
- prev_dup = mime_hdr_field_find(mh, name, length);
+ std::string_view name{field->name_get()};
+ prev_dup = mime_hdr_field_find(mh, name.data(),
static_cast<int>(name.size()));
ink_assert((prev_dup == nullptr) || (prev_dup->is_dup_head()));
}
@@ -1595,9 +1594,8 @@ mime_hdr_field_detach(MIMEHdrImpl *mh, MIMEField *field,
bool detach_all_dups)
}
} else // need to walk list to find and patch out from predecessor
{
- int name_length;
- const char *name = mime_field_name_get(field, &name_length);
- MIMEField *prev = mime_hdr_field_find(mh, name, name_length);
+ std::string_view name{field->name_get()};
+ MIMEField *prev = mime_hdr_field_find(mh, name.data(),
static_cast<int>(name.size()));
while (prev && (prev->m_next_dup != field)) {
prev = prev->m_next_dup;
@@ -1726,15 +1724,13 @@ mime_field_destroy(MIMEHdrImpl * /* mh ATS_UNUSED */,
MIMEField *field)
field->m_readiness = MIME_FIELD_SLOT_READINESS_DELETED;
}
-const char *
-mime_field_name_get(const MIMEField *field, int *length)
+std::string_view
+MIMEField::name_get() const
{
- *length = field->m_len_name;
- if (field->m_wks_idx >= 0) {
- return hdrtoken_index_to_wks(field->m_wks_idx);
- } else {
- return field->m_ptr_name;
+ if (m_wks_idx >= 0) {
+ return {hdrtoken_index_to_wks(m_wks_idx), m_len_name};
}
+ return {m_ptr_name, m_len_name};
}
void
@@ -1781,45 +1777,42 @@ MIMEField::value_get_index(const char *value, int
length) const
return retval;
}
-const char *
-mime_field_value_get(const MIMEField *field, int *length)
+std::string_view
+MIMEField::value_get() const
{
- *length = field->m_len_value;
- return field->m_ptr_value;
+ return {m_ptr_value, m_len_value};
}
int32_t
mime_field_value_get_int(const MIMEField *field)
{
- int length;
- const char *str = mime_field_value_get(field, &length);
+ std::string_view value{field->value_get()};
- return mime_parse_int(str, str + length);
+ return mime_parse_int(value.data(), value.data() + value.size());
}
uint32_t
mime_field_value_get_uint(const MIMEField *field)
{
- int length;
- const char *str = mime_field_value_get(field, &length);
- return mime_parse_uint(str, str + length);
+ std::string_view value{field->value_get()};
+
+ return mime_parse_uint(value.data(), value.data() + value.size());
}
int64_t
mime_field_value_get_int64(const MIMEField *field)
{
- int length;
- const char *str = mime_field_value_get(field, &length);
+ std::string_view value{field->value_get()};
- return mime_parse_int64(str, str + length);
+ return mime_parse_int64(value.data(), value.data() + value.size());
}
time_t
mime_field_value_get_date(const MIMEField *field)
{
- int length;
- const char *str = mime_field_value_get(field, &length);
- return mime_parse_date(str, str + length);
+ std::string_view value{field->value_get()};
+
+ return mime_parse_date(value.data(), value.data() + value.size());
}
const char *
@@ -1828,10 +1821,9 @@ mime_field_value_get_comma_val(const MIMEField *field,
int *length, int idx)
// some fields (like Date) contain commas but should not be ripped apart
if (!field->supports_commas()) {
if (idx == 0) {
- return mime_field_value_get(field, length);
- } else {
- return nullptr;
+ return field->value_get(length);
}
+ return nullptr;
} else {
Str *str;
StrList list(false);
@@ -1864,16 +1856,13 @@ mime_field_value_get_comma_val_count(const MIMEField
*field)
int
mime_field_value_get_comma_list(const MIMEField *field, StrList *list)
{
- const char *str;
- int len;
-
- str = mime_field_value_get(field, &len);
+ std::string_view value{field->value_get()};
// if field doesn't support commas, don't rip apart.
if (!field->supports_commas()) {
- list->append_string(str, len);
+ list->append_string(value.data(), static_cast<int>(value.size()));
} else {
- HttpCompat::parse_tok_list(list, 1, str, len, ',');
+ HttpCompat::parse_tok_list(list, 1, value.data(),
static_cast<int>(value.size()), ',');
}
return list->count;
diff --git a/proxy/hdrs/MIME.h b/proxy/hdrs/MIME.h
index 59431a6..5e78834 100644
--- a/proxy/hdrs/MIME.h
+++ b/proxy/hdrs/MIME.h
@@ -141,6 +141,8 @@ struct MIMEField {
return true; // by default, assume supports commas
}
+ /// @return The name of @a this field.
+ std::string_view name_get() const;
const char *name_get(int *length) const;
/** Find the index of the value in the multi-value field.
@@ -157,7 +159,10 @@ struct MIMEField {
*/
int value_get_index(const char *value, int length) const;
+ /// @return The value of @a this field.
+ std::string_view value_get() const;
const char *value_get(int *length) const;
+
int32_t value_get_int() const;
uint32_t value_get_uint() const;
int64_t value_get_int64() const;
@@ -655,11 +660,9 @@ inkcoreapi MIMEField
*mime_hdr_prepare_for_value_set(HdrHeap *heap, MIMEHdrImpl
void mime_field_destroy(MIMEHdrImpl *mh, MIMEField *field);
-const char *mime_field_name_get(const MIMEField *field, int *length);
void mime_field_name_set(HdrHeap *heap, MIMEHdrImpl *mh, MIMEField *field,
int16_t name_wks_idx_or_neg1, const char *name,
int length, bool must_copy_string);
-inkcoreapi const char *mime_field_value_get(const MIMEField *field, int
*length);
int32_t mime_field_value_get_int(const MIMEField *field);
uint32_t mime_field_value_get_uint(const MIMEField *field);
int64_t mime_field_value_get_int64(const MIMEField *field);
@@ -744,7 +747,9 @@ int mime_parse_integer(const char *&buf, const char *end,
int *integer);
inline const char *
MIMEField::name_get(int *length) const
{
- return (mime_field_name_get(this, length));
+ auto name{this->name_get()};
+ *length = int(name.size());
+ return name.data();
}
/*-------------------------------------------------------------------------
@@ -788,7 +793,9 @@ MIMEField::name_is_valid() const
inline const char *
MIMEField::value_get(int *length) const
{
- return (mime_field_value_get(this, length));
+ auto value{this->value_get()};
+ *length = int(value.size());
+ return value.data();
}
inline int32_t
@@ -1253,20 +1260,17 @@ MIMEHdr::value_get_index(const char *name, int
name_length, const char *value, i
inline const char *
MIMEHdr::value_get(const char *name, int name_length, int
*value_length_return) const
{
- // ink_assert(valid());
- const MIMEField *field = field_find(name, name_length);
-
- if (field)
- return (mime_field_value_get(field, value_length_return));
- else
- return (nullptr);
+ if (const MIMEField *field = field_find(name, name_length); field) {
+ return field->value_get(value_length_return);
+ }
+ return nullptr;
}
inline std::string_view
MIMEHdr::value_get(std::string_view const &name) const
{
if (MIMEField const *field = field_find(name.data(), name.size()); field) {
- return {field->m_ptr_value, field->m_len_value};
+ return field->value_get();
}
return {};
}
diff --git a/src/traffic_server/InkAPI.cc b/src/traffic_server/InkAPI.cc
index 2969dbc..b92e42c 100644
--- a/src/traffic_server/InkAPI.cc
+++ b/src/traffic_server/InkAPI.cc
@@ -2684,7 +2684,7 @@ TSMimeFieldValueGet(TSMBuffer /* bufp ATS_UNUSED */,
TSMLoc field_obj, int idx,
if (idx >= 0) {
return mime_field_value_get_comma_val(handle->field_ptr, value_len_ptr,
idx);
} else {
- return mime_field_value_get(handle->field_ptr, value_len_ptr);
+ return handle->field_ptr->value_get(value_len_ptr);
}
}
@@ -3135,8 +3135,8 @@ TSMimeHdrFieldNameGet(TSMBuffer bufp, TSMLoc hdr, TSMLoc
field, int *length)
sdk_assert(sdk_sanity_check_field_handle(field, hdr) == TS_SUCCESS);
sdk_assert(sdk_sanity_check_null_ptr((void *)length) == TS_SUCCESS);
- MIMEFieldSDKHandle *handle = (MIMEFieldSDKHandle *)field;
- return mime_field_name_get(handle->field_ptr, length);
+ MIMEFieldSDKHandle *handle = reinterpret_cast<MIMEFieldSDKHandle *>(field);
+ return handle->field_ptr->name_get(length);
}
TSReturnCode