ハンドラー関数の記述

ハンドラー関数は継続の重要なコンポーネントです。これはイベントとイベントデータを検査し、その後適切な処理を行う事になっています。行われるであろうアクションは、別のイベントを継続が受け取るようスケジュールする、サーバへのコネクションを開始する、単純に自身を破棄するなどになる可能性があります。

継続のハンドラー関数は TSEventFunc 型の関数です。引数は継続、イベント、そして幾つかのデータ(このデータは呼び出し元によって継続に渡されます。このデータを TSContDataSet() によって関連付けられる継続自身のデータと混同しないでください。)へのポインタです。継続がコールバックされる際、継続とイベントはハンドラー関数に渡されます。継続は発生した同じ継続へのハンドルです。ハンドラー関数は典型的に受け取ったイベントを処理するための switch 文を持ちます。 :

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

注意

継続は更なるイベントが向かってきている "途中" かどうか確認できないことに気付くかもしれません。 TSHttpTxnHookAdd() の呼び出しによって送られるような、全てのやって来るイベントが処理されたのを確認する前に、継続を削除するための TSContDestroy() を使用しないでください。

注意

TS_HTTP_SEND_REQUEST_HDR_HOOK may callback several times when the OS crashed. Be careful to use functions such as TSContDestroy in TS_HTTP_SEND_REQUEST_HDR_HOOK hook.

下記の表ではハンドラー関数に渡されるイベントと void* data の型に相当するものを列挙します。 :

イベント

イベントの送信元

データタイプ

TS_EVENT_HTTP_READ_REQUEST_HDR

TS_HTTP_READ_REQUEST_HDR_HOOK

TSHttpTxn

TS_EVENT_HTTP_PRE_REMAP

TS_HTTP_PRE_REMAP_HOOK

TSHttpTxn

TS_EVENT_HTTP_OS_DNS

TS_HTTP_OS_DNS_HOOK

TSHttpTxn

TS_EVENT_HTTP_SEND_REQUEST_HDR

TS_HTTP_SEND_REQUEST_HDR_HOOK

TSHttpTxn

TS_EVENT_HTTP_READ_CACHE_HDR

TS_HTTP_READ_CACHE_HDR_HOOK

TSHttpTxn

TS_EVENT_HTTP_READ_RESPONSE_HDR

TS_HTTP_READ_RESPONSE_HDR_HOOK

TSHttpTxn

TS_EVENT_HTTP_SEND_RESPONSE_HDR

TS_HTTP_SEND_RESPONSE_HDR_HOOK

TSHttpTxn

TS_EVENT_HTTP_SELECT_ALT

TS_HTTP_SELECT_ALT_HOOK

TSHttpTxn

TS_EVENT_HTTP_TXN_START

TS_HTTP_TXN_START_HOOK

TSHttpTxn

TS_EVENT_HTTP_TXN_CLOSE

TS_HTTP_TXN_CLOSE_HOOK

TSHttpTxn

TS_EVENT_HTTP_SSN_START

TS_HTTP_SSN_START_HOOK

TSHttpSsn

TS_EVENT_HTTP_SSN_CLOSE

TS_HTTP_SSN_CLOSE_HOOK

TSHttpSsn

TS_EVENT_NONE

TS_EVENT_CACHE_LOOKUP_COMPLETE

TS_HTTP_CACHE_LOOKUP_COMPLETE_HOOK

TSHttpTxn

TS_EVENT_IMMEDIATE

TSVConnClose() TSVIOReenable() TSContSchedule() TSContScheduleOnPool() TSContScheduleOnThread()

TS_EVENT_IMMEDIATE

TS_HTTP_REQUEST_TRANSFORM_HOOK

TS_EVENT_IMMEDIATE

TS_HTTP_RESPONSE_TRANSFORM_HOOK

TS_EVENT_CACHE_OPEN_READ

TSCacheRead()

キャッシュ VC

TS_EVENT_CACHE_OPEN_READ_FAILED

TSCacheRead()

TS_CACHE_ERROR コード

TS_EVENT_CACHE_OPEN_WRITE

TSCacheWrite()

キャッシュ VC

TS_EVENT_CACHE_OPEN_WRITE_FAILED

TSCacheWrite()

TS_CACHE_ERROR コード

TS_EVENT_CACHE_REMOVE

TSCacheRemove()

TS_EVENT_CACHE_REMOVE_FAILED

TSCacheRemove()

TS_CACHE_ERROR コード

TS_EVENT_NET_ACCEPT

TSNetAccept() TSHttpTxnServerIntercept() TSHttpTxnIntercept()

TSNetVConnection

TS_EVENT_NET_ACCEPT_FAILED

TSNetAccept() TSHttpTxnServerIntercept() TSHttpTxnIntercept()

TS_EVENT_HOST_LOOKUP

TSHostLookup()

TSHostLookupResult

TS_EVENT_TIMEOUT

TSContSchedule() TSContScheduleOnPool() TSContScheduleOnThread()

TS_EVENT_ERROR

TS_EVENT_VCONN_READ_READY

TSVConnRead()

TSVIO

TS_EVENT_VCONN_WRITE_READY

TSVConnWrite()

TSVIO

TS_EVENT_VCONN_READ_COMPLETE

TSVConnRead()

TSVIO

TS_EVENT_VCONN_WRITE_COMPLETE

TSVConnWrite()

TSVIO

TS_EVENT_VCONN_EOS

TSVConnRead()

TSVIO

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()

継続関数を以下に列挙します。 :