The handler function is the key component of a continuation. It is supposed to examine the event and event data, and then do something appropriate. The probable action might be to schedule another event for the continuation to received, to open up a connection to a server, or simply to destroy itself.
The continuation's handler function is a function of type TSEventFunc. Its
arguments are a continuation, an event, and a pointer to some data (this data
is passed to the continuation by the caller - do not confuse this data with
the continuation's own data, associated by TSContDataSet). When the continuation
is called back, the continuation and an event are passed to the handler function.
The continuation is a handle to the same continuation that is invoked. The
handler function typically has a switch statement to handle the events it receives:
static int some_handler (TScont contp, TSEvent event, void *edata) { ..... switch(event) { case TS_EVENT_SOME_EVENT_1: do_some_thing_1; return; case TS_EVENT_SOME_EVENT_2: do_some_thing_2; return; case TS_EVENT_SOME_EVENT_3: do_some_thing_3; return; default: break; } return 0; }
![[Caution]](/images/docbook/caution.png)
Caution
You might notice that a continuation cannot determine if more events are "in
flight" toward it. Do not use TSContDestroy to delete a continuation before
you make sure that all incoming events, such as those sent because of TSHttpTxnHookAdd,
have been handled.
The following table lists events and the corresponding type of void *data
passed to handler functions:
TS_EVENT_HTTP_READ_REQUEST_HDRTS_HTTP_READ_REQUEST_HDR_HOOKTSHttpTxnTS_EVENT_HTTP_OS_DNSTS_HTTP_OS_DNS_HOOKTSHttpTxnTS_EVENT_HTTP_SEND_REQUEST_HDRTS_HTTP_SEND_REQUEST_HDR_HOOKTSHttpTxnTS_EVENT_HTTP_READ_CACHE_HDRTS_HTTP_READ_CACHE_HDR_HOOKTSHttpTxnTS_EVENT_HTTP_READ_RESPONSE_HDRTS_HTTP_READ_RESPONSE_HDR_HOOKTSHttpTxnTS_EVENT_HTTP_SEND_RESPONSE_HDRTS_HTTP_SEND_RESPONSE_HDR_HOOKTSHttpTxnTS_EVENT_HTTP_SELECT_ALTTS_HTTP_SELECT_ALT_HOOKTSHttpTxnTS_EVENT_HTTP_TXN_STARTTS_HTTP_TXN_START_HOOKTSHttpTxnTS_EVENT_HTTP_TXN_CLOSETS_HTTP_TXN_CLOSE_HOOKTSHttpTxnTS_EVENT_HTTP_SSN_STARTTS_HTTP_SSN_START_HOOKTSHttpSsnTS_EVENT_HTTP_SSN_CLOSETS_HTTP_SSN_CLOSE_HOOKTSHttpSsnTS_EVENT_NONETS_EVENT_CACHE_LOOKUP_COMPLETETS_HTTP_CACHE_LOOKUP_COMPLETE_HOOKTSHttpTxnTS_EVENT_IMMEDIATETSVConnClose, TSVIOReenable, TSContScheduleTS_EVENT_IMMEDIATETS_HTTP_REQUEST_TRANSFORM_HOOKTS_EVENT_IMMEDIATETS_HTTP_RESPONSE_TRANSFORM_HOOKTS_EVENT_CACHE_OPEN_READTSCacheRead- Cache VC
TS_EVENT_CACHE_OPEN_READ_FAILEDTSCacheRead- Error code, see
TS_CACHE_ERROR_XXX TS_EVENT_CACHE_OPEN_WRITETSCacheWrite- Cache VC
TS_EVENT_CACHE_OPEN_WRITE_FAILEDTSCacheWrite- Error code, see
TS_CACHE_ERROR_XXX TS_EVENT_CACHE_REMOVETSCacheRemove- Nothing
TS_EVENT_CACHE_REMOVE_FAILEDTSCacheRemove- Error code, see
TS_CACHE_ERROR_XXX TS_EVENT_NET_ACCEPT-
TSNetAccept, TSHttpTxnServerIntercept, TSHttpTxnIntercept: Net VConnection
TS_EVENT_NET_ACCEPT_FAILED-
TSNetAccept, TSHttpTxnServerIntercept, TSHttpTxnIntercept: Nothing
TS_EVENT_HOST_LOOKUP-
TSHostLookup -
Null pointer - error Non null pointer -
TSHostLookupResult TS_EVENT_TIMEOUT-
TSContSchedule -
TS_EVENT_ERROR-
-
TS_EVENT_VCONN_READ_READY-
TSVConnRead -
TSVConn TS_EVENT_VCONN_WRITE_READY-
TSVConnWrite -
TSVConn TS_EVENT_VCONN_READ_COMPLETE-
TSVConnRead -
TSVConn TS_EVENT_VCONN_WRITE_COMPLETE-
TSVConnWrite -
TSVConn TS_EVENT_VCONN_EOS-
TSVConnRead -
TSVConn TS_EVENT_NET_CONNECT-
TSNetConnect -
TSVConn TS_EVENT_NET_CONNECT_FAILED-
TSNetConnect -
TSVConn TS_EVENT_HTTP_CONTINUE-
-
TS_EVENT_HTTP_ERROR-
-
TS_EVENT_MGMT_UPDATE-
TSMgmtUpdateRegister -
NULL
The continuation functions are listed below:
-
TSContCall -
TSContCreate -
TSContDataGet -
TSContDataSet -
TSContDestroy -
TSContMutexGet -
TSContSchedule

