Provided by: trafficserver-dev_9.2.0+ds-2_amd64 bug

NAME

       TSMimeHdrFieldValueStringGet - get HTTP MIME header values

SYNOPSIS

          #include <ts/ts.h>

       const  char  *TSMimeHdrFieldValueStringGet(TSMBuffer  bufp,  TSMLoc hdr, TSMLoc field, int
       idx, int *value_len_ptr)

       int TSMimeHdrFieldValueIntGet(TSMBuffer bufp, TSMLoc hdr, TSMLoc field, int idx)

       int64_t TSMimeHdrFieldValueInt64Get(TSMBuffer bufp, TSMLoc hdr, TSMLoc field, int idx)

       unsigned int TSMimeHdrFieldValueUintGet(TSMBuffer bufp, TSMLoc hdr, TSMLoc field, int idx)

       time_t TSMimeHdrFieldValueDateGet(TSMBuffer bufp, TSMLoc hdr, TSMLoc field)

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.

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.

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;
          }

SEE ALSO

       TSAPI(3ts), TSMBufferCreate(3ts), TSMimeHdrFieldValuesCount(3ts)

COPYRIGHT

       2023, dev@trafficserver.apache.org