ハンドラー関数の記述

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

継続のハンドラー関数は 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() を使用しないでください。

下記の表ではハンドラー関数に渡されるイベントと 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()  
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()  
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()  

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