static int process_plugin(INKCont contp, INKEvent event, void *edata) { LOG_SET_FUNCTION_NAME("process_plugin"); INKHttpTxn txnp = (INKHttpTxn) edata; switch (event) { case INK_EVENT_HTTP_TXN_START: handle_txn_start(contp, txnp); break; case INK_EVENT_HTTP_READ_CACHE_HDR: handle_cache_hdr(txnp); break; case INK_EVENT_HTTP_READ_RESPONSE_HDR: handle_response_hdr(contp, txnp); break; default: break; } if (INKHttpTxnReenable(txnp, INK_EVENT_HTTP_CONTINUE) == INK_ERROR) LOG_ERROR("INKHttpTxnReenable"); return 0; }
static int blacklist_plugin(TSCont contp, TSEvent event, void *edata) { TSHttpTxn txnp; cdata *cd; switch (event) { case TS_EVENT_HTTP_TXN_START: txnp = (TSHttpTxn)edata; handle_txn_start(contp, txnp); return 0; case TS_EVENT_HTTP_OS_DNS: if (contp != global_contp) { cd = (cdata *)TSContDataGet(contp); cd->cf = HANDLE_DNS; handle_dns(cd->txnp, contp); return 0; } else { break; } case TS_EVENT_HTTP_TXN_CLOSE: txnp = (TSHttpTxn)edata; if (contp != global_contp) { destroy_continuation(txnp, contp); } break; case TS_EVENT_HTTP_SEND_RESPONSE_HDR: if (contp != global_contp) { cd = (cdata *)TSContDataGet(contp); cd->cf = HANDLE_RESPONSE; handle_response(cd->txnp, contp); return 0; } else { break; } case TS_EVENT_TIMEOUT: /* when mutex lock is not acquired and continuation is rescheduled, the plugin is called back with TS_EVENT_TIMEOUT with a NULL edata. We need to decide, in which function did the MutexLock failed and call that function again */ if (contp != global_contp) { cd = (cdata *)TSContDataGet(contp); switch (cd->cf) { case HANDLE_DNS: handle_dns(cd->txnp, contp); return 0; case HANDLE_RESPONSE: handle_response(cd->txnp, contp); return 0; default: TSDebug(PLUGIN_NAME, "This event was unexpected: %d", event); break; } } else { read_blacklist(contp); return 0; } default: break; } return 0; }