| 672 | } |
| 673 | |
| 674 | static int |
| 675 | globalHookHandler(TSCont contp, TSEvent event ATS_UNUSED, void *edata) |
| 676 | { |
| 677 | TSHttpTxn txnp = (TSHttpTxn)edata; |
| 678 | |
| 679 | TSMBuffer bufp; |
| 680 | TSMLoc hdr_loc; |
| 681 | TSMLoc url_loc; |
| 682 | |
| 683 | int ret; |
| 684 | uint64_t req_id; |
| 685 | TSCont txn_contp; |
| 686 | |
| 687 | lua_State *l; |
| 688 | |
| 689 | ts_lua_main_ctx *main_ctx; |
| 690 | ts_lua_http_ctx *http_ctx; |
| 691 | ts_lua_cont_info *ci; |
| 692 | |
| 693 | ts_lua_instance_conf *conf = (ts_lua_instance_conf *)TSContDataGet(contp); |
| 694 | |
| 695 | main_ctx = static_cast<decltype(main_ctx)>(pthread_getspecific(lua_g_state_key)); |
| 696 | if (main_ctx == nullptr) { |
| 697 | req_id = __sync_fetch_and_add(&ts_lua_g_http_next_id, 1); |
| 698 | Dbg(dbg_ctl, "[%s] req_id: %" PRId64, __FUNCTION__, req_id); |
| 699 | main_ctx = &ts_lua_g_main_ctx_array[req_id % conf->states]; |
| 700 | pthread_setspecific(lua_g_state_key, main_ctx); |
| 701 | } |
| 702 | |
| 703 | TSMutexLock(main_ctx->mutexp); |
| 704 | |
| 705 | http_ctx = ts_lua_create_http_ctx(main_ctx, conf); |
| 706 | http_ctx->txnp = txnp; |
| 707 | http_ctx->rri = nullptr; |
| 708 | http_ctx->has_hook = 0; |
| 709 | |
| 710 | if (!http_ctx->client_request_bufp) { |
| 711 | if (TSHttpTxnClientReqGet(txnp, &bufp, &hdr_loc) == TS_SUCCESS) { |
| 712 | http_ctx->client_request_bufp = bufp; |
| 713 | http_ctx->client_request_hdrp = hdr_loc; |
| 714 | |
| 715 | if (TSHttpHdrUrlGet(bufp, hdr_loc, &url_loc) == TS_SUCCESS) { |
| 716 | http_ctx->client_request_url = url_loc; |
| 717 | } |
| 718 | } |
| 719 | } |
| 720 | |
| 721 | if (!http_ctx->client_request_hdrp) { |
| 722 | ts_lua_destroy_http_ctx(http_ctx); |
| 723 | TSMutexUnlock(main_ctx->mutexp); |
| 724 | |
| 725 | TSHttpTxnReenable(txnp, TS_EVENT_HTTP_CONTINUE); |
| 726 | return 0; |
| 727 | } |
| 728 | |
| 729 | txn_contp = TSContCreate(ts_lua_http_cont_handler, nullptr); |
| 730 | TSContDataSet(txn_contp, http_ctx); |
| 731 |
nothing calls this directly
no test coverage detected