.\" Man page generated from reStructuredText. . .TH "TSHTTPHOOKADD" "3ts" "Mar 08, 2019" "7.1" "Apache Traffic Server" .SH NAME TSHttpHookAdd \- intercept Traffic Server events . .nr rst2man-indent-level 0 . .de1 rstReportMargin \\$1 \\n[an-margin] level \\n[rst2man-indent-level] level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] - \\n[rst2man-indent0] \\n[rst2man-indent1] \\n[rst2man-indent2] .. .de1 INDENT .\" .rstReportMargin pre: . RS \\$1 . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] . nr rst2man-indent-level +1 .\" .rstReportMargin post: .. .de UNINDENT . RE .\" indent \\n[an-margin] .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] .nr rst2man-indent-level -1 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. .SH SYNOPSIS .sp \fI#include \fP .INDENT 0.0 .TP .B void TSHttpHookAdd(TSHttpHookID\fI\ id\fP, TSCont\fI\ contp\fP) .UNINDENT .INDENT 0.0 .TP .B void TSHttpSsnHookAdd(TSHttpSsn\fI\ ssnp\fP, TSHttpHookID\fI\ id\fP, TSCont\fI\ contp\fP) .UNINDENT .INDENT 0.0 .TP .B void TSHttpTxnHookAdd(TSHttpTxn\fI\ txnp\fP, TSHttpHookID\fI\ id\fP, TSCont\fI\ contp\fP) .UNINDENT .SH DESCRIPTION .sp 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. .sp HTTP transaction hooks are set on a global basis using the function \fI\%TSHttpHookAdd()\fP\&. This means that the continuation specified as the parameter to \fI\%TSHttpHookAdd()\fP is called for every transaction. \fI\%TSHttpHookAdd()\fP is typically called from \fBTSPluginInit()\fP or \fBTSRemapInit()\fP\&. .sp \fI\%TSHttpSsnHookAdd()\fP adds \fIcontp\fP to the end of the list of HTTP session hooks specified by \fIid\fP\&. This means that \fIcontp\fP is called back for every transaction within the session, at the point specified by the hook ID. Since \fIcontp\fP is added to a session, it is not possible to call \fI\%TSHttpSsnHookAdd()\fP from the plugin initialization routine; the plugin needs a handle to an HTTP session. .sp \fI\%TSHttpTxnHookAdd()\fP adds \fIcontp\fP to the end of the list of HTTP transaction hooks specified by \fIid\fP\&. Since \fIcontp\fP is added to a transaction, it is not possible to call \fI\%TSHttpTxnHookAdd()\fP from the plugin initialization routine but only when the plugin has a handle to an HTTP transaction. .SH RETURN VALUES .sp None. Adding hooks is always successful. .SH EXAMPLES .sp The following example demonstrates how to add global, session and transaction hooks: .INDENT 0.0 .INDENT 3.5 .sp .nf .ft C #include 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); } .ft P .fi .UNINDENT .UNINDENT .SH SEE ALSO .sp \fBTSAPI(3ts)\fP, \fBTSContCreate(3ts)\fP, \fBTSLifecycleHookAdd(3ts)\fP .SH COPYRIGHT 2019, dev@trafficserver.apache.org .\" Generated by docutils manpage writer. .