static int main_handler(TSCont cont, TSEvent event, void *edata) { TSHttpTxn txn = (TSHttpTxn)edata; int status; invalidate_t *iptr; plugin_state_t *pstate; time_t date = 0, now = 0; char *url = NULL; int url_len = 0; switch (event) { case TS_EVENT_HTTP_CACHE_LOOKUP_COMPLETE: if (TSHttpTxnCacheLookupStatusGet(txn, &status) == TS_SUCCESS) { if (status == TS_CACHE_LOOKUP_HIT_FRESH) { pstate = (plugin_state_t *)TSContDataGet(cont); iptr = pstate->invalidate_list; while (iptr) { if (!date) { date = get_date_from_cached_hdr(txn); now = time(NULL); } if ((difftime(iptr->epoch, date) >= 0) && (difftime(iptr->expiry, now) >= 0)) { if (!url) { url = TSHttpTxnEffectiveUrlStringGet(txn, &url_len); } if (pcre_exec(iptr->regex, iptr->regex_extra, url, url_len, 0, 0, NULL, 0) >= 0) { TSHttpTxnCacheLookupStatusSet(txn, TS_CACHE_LOOKUP_HIT_STALE); iptr = NULL; TSDebug(LOG_PREFIX, "Forced revalidate - %.*s", url_len, url); } } if (iptr) { iptr = iptr->next; } } if (url) { TSfree(url); } } } break; default: break; } TSHttpTxnReenable(txn, TS_EVENT_HTTP_CONTINUE); return 0; }
static int ts_lua_http_set_cache_lookup_status(lua_State *L) { int status; ts_lua_http_ctx *http_ctx; GET_HTTP_CONTEXT(http_ctx, L); status = luaL_checknumber(L, 1); TSHttpTxnCacheLookupStatusSet(http_ctx->txnp, status); return 0; }
static int ts_lua_http_set_cache_lookup_status(lua_State *L) { int status; ts_lua_http_ctx *http_ctx; http_ctx = ts_lua_get_http_ctx(L); status = luaL_checknumber(L, 1); TSHttpTxnCacheLookupStatusSet(http_ctx->txnp, status); return 0; }