Provided by: trafficserver-dev_7.1.2+ds-3_amd64 bug

NAME

       TSHttpHookAdd - intercept Traffic Server events

SYNOPSIS

       #include <ts/ts.h>

       void TSHttpHookAdd(TSHttpHookID id, TSCont contp)

       void TSHttpSsnHookAdd(TSHttpSsn ssnp, TSHttpHookID id, TSCont contp)

       void TSHttpTxnHookAdd(TSHttpTxn txnp, TSHttpHookID id, TSCont contp)

DESCRIPTION

       Hooks  are  points  in Apache Traffic Server transaction HTTP processing where plugins can
       step in and do some work. Registering a plugin function for callback amounts to adding the
       function  to  a  hook.  You  can  register  your plugin to be called back for every single
       transaction, or for specific transactions only.

       HTTP transaction hooks are set on a global basis using the function TSHttpHookAdd().  This
       means  that  the  continuation specified as the parameter to TSHttpHookAdd() is called for
       every  transaction.  TSHttpHookAdd()  is   typically   called   from   TSPluginInit()   or
       TSRemapInit().

       TSHttpSsnHookAdd()  adds  contp  to the end of the list of HTTP session hooks specified by
       id.  This means that contp is called back for every transaction within the session, at the
       point  specified  by the hook ID. Since contp is added to a session, it is not possible to
       call TSHttpSsnHookAdd() from the plugin initialization routine; the plugin needs a  handle
       to an HTTP session.

       TSHttpTxnHookAdd()  adds  contp to the end of the list of HTTP transaction hooks specified
       by  id.  Since  contp  is  added  to  a  transaction,  it  is   not   possible   to   call
       TSHttpTxnHookAdd()  from  the plugin initialization routine but only when the plugin has a
       handle to an HTTP transaction.

RETURN VALUES

       None. Adding hooks is always successful.

EXAMPLES

       The following example demonstrates how to add global, session and transaction hooks:

          #include <ts/ts.h>

          static int
          handler(TSCont contp, TSEvent event, void *edata)
          {
              TSHttpSsn ssnp;
              TSHttpTxn txnp;

              switch (event){
              case TS_EVENT_HTTP_SSN_START:
                  ssnp = (TSHttpSsn) edata;
                  // Add a session hook ...
                  TSHttpSsnHookAdd(ssnp, TS_HTTP_TXN_START_HOOK, contp);
                  TSHttpSsnReenable(ssnp, TS_EVENT_HTTP_CONTINUE);
                  return 0;
              case TS_EVENT_HTTP_TXN_START:
                  txnp = (TSHttpTxn) edata;
                  // Add a transaction hook ...
                  TSHttpTxnHookAdd(txnp, TS_HTTP_READ_REQUEST_HDR_HOOK, contp);
                  TSHttpTxnReenable(txnp, TS_EVENT_HTTP_CONTINUE);
                  return 0;
              default:
                   break;
              }

              return 0;
          }

          void
          TSPluginInit (int argc, const char *argv[])
          {
              TSCont contp;
              contp = TSContCreate(handler, NULL);
              TSHttpHookAdd(TS_HTTP_SSN_START_HOOK, contp);
          }

SEE ALSO

       TSAPI(3ts), TSContCreate(3ts), TSLifecycleHookAdd(3ts)

COPYRIGHT

       2018, dev@trafficserver.apache.org