TSMimeHdrFieldValueStringGet - get HTTP MIME header values
Contents
Copyright
2025, dev@trafficserver.apache.org
9.2 May 22, 2025 TSMIMEHDRFIELDVALUESTRINGGET(3ts)
Description
MIME headers and fields can be components of request headers, response headers, or standalone headers
created within a Traffic Server plugin. The functions here are all used to access header values of
specific types, but it is up to the caller to know if a header has appropriate semantics for the API
used. For all but TSMimeHdrFieldValueStringGet(), an appropriate data conversion algorithm is applied to
the header field string.
All the APIs take a TSMBuffer marshal buffer argument bufp, and a TSMLoc argument hdr indicating the
location of the HTTP headers. The required field argument is the locator of a specific header value, as
returned by an accessor function such as TSMimeHdrFieldFind().
Within the header field, comma-separated values can be retrieved with an index idx ranging from 0 to the
maximum number of fields for this value; this maximum is retrieved using TSMimeHdrFieldValuesCount(). An
idx value of -1 has the semantics of retrieving the entire header value, regardless of how many
comma-separated values there are. If a header is not comma-separated, an idx of 0 or -1 are the same, but
the latter is preferred.
TSMimeHdrFieldValueStringGet() returns a pointer to the header value, and populated value_len_ptr with
the length of the value in bytes. The returned header value is not NUL-terminated.
Examples
This examples show how to retrieve and copy a specific header.
#include <string.h>
#include <ts/ts.h>
int
get_content_type(TSHttpTxn txnp, char* buf, size_t buf_size)
{
TSMBuffer bufp;
TSMLoc hdrs;
TSMLoc ctype_field;
int len = -1;
if (TS_SUCCESS == TSHttpTxnServerRespGet(txnp, &bufp, &hdrs)) {
ctype_field = TSMimeHdrFieldFind(bufp, hdrs, TS_MIME_FIELD_CONTENT_TYPE, TS_MIME_LEN_CONTENT_TYPE);
if (TS_NULL_MLOC != ctype_field) {
const char* str = TSMimeHdrFieldValueStringGet(bufp, hdrs, ctype_field, -1, &len);
if (len > buf_size)
len = buf_size;
memcpy(buf, str, len);
TSHandleMLocRelease(bufp, hdrs, ctype_field);
}
TSHandleMLocRelease(bufp, TS_NULL_MLOC, hdrs);
}
return len;
}
Name
TSMimeHdrFieldValueStringGet - get HTTP MIME header values
Return Values
All functions returns the header value with a type matching the respective function name. Using
TSMimeHdrFieldValueDateGet() on a header which does not have date-time semantics always returns 0.
See Also
TSAPI(3ts), TSMBufferCreate(3ts), TSMimeHdrFieldValuesCount(3ts)
Synopsis
#include <ts/ts.h>
constchar*TSMimeHdrFieldValueStringGet(TSMBufferbufp,TSMLochdr,TSMLocfield,intidx,int*value_len_ptr)intTSMimeHdrFieldValueIntGet(TSMBufferbufp,TSMLochdr,TSMLocfield,intidx)int64_tTSMimeHdrFieldValueInt64Get(TSMBufferbufp,TSMLochdr,TSMLocfield,intidx)unsignedintTSMimeHdrFieldValueUintGet(TSMBufferbufp,TSMLochdr,TSMLocfield,intidx)time_tTSMimeHdrFieldValueDateGet(TSMBufferbufp,TSMLochdr,TSMLocfield)