logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

TSMimeHdrFieldValueStringGet - get HTTP MIME header values

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)

See Also