Lines Matching refs:hctx
1079 static handler_t gw_process_fdevent(gw_handler_ctx *hctx, request_st *r, int revents);
1084 gw_handler_ctx *hctx = ck_calloc(1, 0 == sz ? sizeof(*hctx) : sz); in handler_ctx_init() local
1088 hctx->request_id = 0; in handler_ctx_init()
1089 hctx->gw_mode = GW_RESPONDER; in handler_ctx_init()
1090 hctx->state = GW_STATE_INIT; in handler_ctx_init()
1091 hctx->proc = NULL; in handler_ctx_init()
1093 hctx->fd = -1; in handler_ctx_init()
1095 hctx->reconnects = 0; in handler_ctx_init()
1096 hctx->send_content_body = 1; in handler_ctx_init()
1099 chunkqueue_init(&hctx->wb); in handler_ctx_init()
1100 hctx->wb_reqlen = 0; in handler_ctx_init()
1102 return hctx; in handler_ctx_init()
1105 static void handler_ctx_free(gw_handler_ctx *hctx) { in handler_ctx_free() argument
1107 if (hctx->handler_ctx_free) hctx->handler_ctx_free(hctx); in handler_ctx_free()
1108 chunk_buffer_release(hctx->response); in handler_ctx_free()
1110 if (hctx->rb) chunkqueue_free(hctx->rb); in handler_ctx_free()
1111 chunkqueue_reset(&hctx->wb); in handler_ctx_free()
1113 free(hctx); in handler_ctx_free()
1116 static void handler_ctx_clear(gw_handler_ctx *hctx) { in handler_ctx_clear() argument
1119 hctx->proc = NULL; in handler_ctx_clear()
1120 hctx->host = NULL; in handler_ctx_clear()
1121 hctx->ext = NULL; in handler_ctx_clear()
1124 hctx->gw_mode = GW_RESPONDER; in handler_ctx_clear()
1125 hctx->state = GW_STATE_INIT; in handler_ctx_clear()
1128 if (hctx->rb) chunkqueue_reset(hctx->rb); in handler_ctx_clear()
1129 chunkqueue_reset(&hctx->wb); in handler_ctx_clear()
1130 hctx->wb_reqlen = 0; in handler_ctx_clear()
1132 if (hctx->response) buffer_clear(hctx->response); in handler_ctx_clear()
1134 hctx->fd = -1; in handler_ctx_clear()
1135 hctx->reconnects = 0; in handler_ctx_clear()
1136 hctx->request_id = 0; in handler_ctx_clear()
1137 hctx->send_content_body = 1; in handler_ctx_clear()
1755 static void gw_set_state(gw_handler_ctx *hctx, gw_connection_state_t state) { in gw_set_state() argument
1756 hctx->state = state; in gw_set_state()
1761 void gw_set_transparent(gw_handler_ctx *hctx) { in gw_set_transparent() argument
1762 if (AF_UNIX != hctx->host->family) { in gw_set_transparent()
1763 if (-1 == fdevent_set_tcp_nodelay(hctx->fd, 1)) { in gw_set_transparent()
1767 hctx->wb_reqlen = -1; in gw_set_transparent()
1768 gw_set_state(hctx, GW_STATE_WRITE); in gw_set_transparent()
1772 static void gw_host_hctx_enq(gw_handler_ctx * const hctx) { in gw_host_hctx_enq() argument
1773 gw_host * const host = hctx->host; in gw_host_hctx_enq()
1776 hctx->prev = NULL; in gw_host_hctx_enq()
1777 hctx->next = host->hctxs; in gw_host_hctx_enq()
1778 if (hctx->next) in gw_host_hctx_enq()
1779 hctx->next->prev = hctx; in gw_host_hctx_enq()
1780 host->hctxs = hctx; in gw_host_hctx_enq()
1784 static void gw_host_hctx_deq(gw_handler_ctx * const hctx) { in gw_host_hctx_deq() argument
1787 if (hctx->prev) in gw_host_hctx_deq()
1788 hctx->prev->next = hctx->next; in gw_host_hctx_deq()
1790 hctx->host->hctxs= hctx->next; in gw_host_hctx_deq()
1792 if (hctx->next) in gw_host_hctx_deq()
1793 hctx->next->prev = hctx->prev; in gw_host_hctx_deq()
1795 hctx->next = NULL; in gw_host_hctx_deq()
1796 hctx->prev = NULL; in gw_host_hctx_deq()
1800 static void gw_backend_close(gw_handler_ctx * const hctx, request_st * const r) { in gw_backend_close() argument
1801 if (hctx->fd >= 0) { in gw_backend_close()
1802 fdevent_fdnode_event_del(hctx->ev, hctx->fdn); in gw_backend_close()
1804 fdevent_sched_close(hctx->ev, hctx->fdn); in gw_backend_close()
1805 hctx->fdn = NULL; in gw_backend_close()
1806 hctx->fd = -1; in gw_backend_close()
1807 gw_host_hctx_deq(hctx); in gw_backend_close()
1810 if (hctx->host) { in gw_backend_close()
1811 if (hctx->proc) { in gw_backend_close()
1812 gw_proc_release(hctx->host, hctx->proc, hctx->conf.debug, in gw_backend_close()
1814 hctx->proc = NULL; in gw_backend_close()
1817 gw_host_reset(hctx->host); in gw_backend_close()
1818 hctx->host = NULL; in gw_backend_close()
1822 static void gw_connection_close(gw_handler_ctx * const hctx, request_st * const r) { in gw_connection_close() argument
1823 gw_plugin_data *p = hctx->plugin_data; in gw_connection_close()
1825 gw_backend_close(hctx, r); in gw_connection_close()
1826 handler_ctx_free(hctx); in gw_connection_close()
1834 static handler_t gw_reconnect(gw_handler_ctx * const hctx, request_st * const r) { in gw_reconnect() argument
1835 gw_backend_close(hctx, r); in gw_reconnect()
1837 hctx->host = gw_host_get(r,hctx->ext,hctx->conf.balance,hctx->conf.debug); in gw_reconnect()
1838 if (NULL == hctx->host) return HANDLER_FINISHED; in gw_reconnect()
1840 gw_host_assign(hctx->host); in gw_reconnect()
1841 hctx->request_id = 0; in gw_reconnect()
1842 hctx->opts.xsendfile_allow = hctx->host->xsendfile_allow; in gw_reconnect()
1843 hctx->opts.xsendfile_docroot = hctx->host->xsendfile_docroot; in gw_reconnect()
1844 gw_set_state(hctx, GW_STATE_INIT); in gw_reconnect()
1851 gw_handler_ctx *hctx = r->plugin_ctx[p->id]; in gw_handle_request_reset() local
1852 if (hctx) gw_connection_close(hctx, r); in gw_handle_request_reset()
1859 static void gw_conditional_tcp_fin(gw_handler_ctx * const hctx, request_st * const r) { in gw_conditional_tcp_fin() argument
1861 if (!chunkqueue_is_empty(&hctx->wb))return; in gw_conditional_tcp_fin()
1862 if (!hctx->host->tcp_fin_propagate) return; in gw_conditional_tcp_fin()
1863 if (hctx->gw_mode == GW_AUTHORIZER) return; in gw_conditional_tcp_fin()
1871 shutdown(hctx->fd, SHUT_WR); in gw_conditional_tcp_fin()
1872 fdevent_fdnode_event_clr(hctx->ev, hctx->fdn, FDEVENT_OUT); in gw_conditional_tcp_fin()
1875 static handler_t gw_write_refill_wb(gw_handler_ctx * const hctx, request_st * const r) { in gw_write_refill_wb() argument
1878 if (hctx->stdin_append) { in gw_write_refill_wb()
1879 if (chunkqueue_length(&hctx->wb) < 65536 - 16384) in gw_write_refill_wb()
1880 return hctx->stdin_append(hctx); in gw_write_refill_wb()
1889 chunkqueue_steal(&hctx->wb, &r->reqbody_queue, in gw_write_refill_wb()
1891 else if (chunkqueue_is_empty(&hctx->wb)) in gw_write_refill_wb()
1892 chunkqueue_append_chunkqueue(&hctx->wb, &r->reqbody_queue); in gw_write_refill_wb()
1894 else if (qlen + chunkqueue_length(&hctx->wb) > 65536) { in gw_write_refill_wb()
1895 if (0 != chunkqueue_steal_with_tempfiles(&hctx->wb, in gw_write_refill_wb()
1900 chunkqueue_append_chunkqueue(&hctx->wb, &r->reqbody_queue); in gw_write_refill_wb()
1905 static handler_t gw_write_request(gw_handler_ctx * const hctx, request_st * const r) { in gw_write_request() argument
1906 switch(hctx->state) { in gw_write_request()
1909 hctx->proc = NULL; in gw_write_request()
1911 for (gw_proc *proc = hctx->host->first; proc; proc = proc->next) { in gw_write_request()
1913 hctx->proc = proc; in gw_write_request()
1919 if (hctx->proc == NULL) { in gw_write_request()
1924 for (gw_proc *proc = hctx->proc->next; proc; proc = proc->next) { in gw_write_request()
1926 if (proc->load < hctx->proc->load) hctx->proc = proc; in gw_write_request()
1929 gw_proc_load_inc(hctx->host, hctx->proc); in gw_write_request()
1931 hctx->fd = fdevent_socket_nb_cloexec(hctx->host->family,SOCK_STREAM,0); in gw_write_request()
1932 if (-1 == hctx->fd) { in gw_write_request()
1941 hctx->fdn = fdevent_register(hctx->ev,hctx->fd,gw_handle_fdevent,hctx); in gw_write_request()
1943 if (hctx->proc->is_local) { in gw_write_request()
1944 hctx->pid = hctx->proc->pid; in gw_write_request()
1947 hctx->write_ts = log_monotonic_secs; in gw_write_request()
1948 gw_host_hctx_enq(hctx); in gw_write_request()
1949 switch (gw_establish_connection(r, hctx->host, hctx->proc, hctx->pid, in gw_write_request()
1950 hctx->fd, hctx->conf.debug)) { in gw_write_request()
1952 fdevent_fdnode_event_set(hctx->ev, hctx->fdn, FDEVENT_OUT); in gw_write_request()
1953 gw_set_state(hctx, GW_STATE_CONNECT_DELAYED); in gw_write_request()
1958 hctx->reconnects = 0; in gw_write_request()
1963 if (hctx->state == GW_STATE_CONNECT_DELAYED) { /*(not GW_STATE_INIT)*/ in gw_write_request()
1964 if (!(fdevent_fdnode_interest(hctx->fdn) & FDEVENT_OUT)) in gw_write_request()
1966 int socket_error = fdevent_connect_status(hctx->fd); in gw_write_request()
1968 gw_proc_connect_error(r, hctx->host, hctx->proc, hctx->pid, in gw_write_request()
1969 socket_error, hctx->conf.debug); in gw_write_request()
1973 hctx->write_ts = log_monotonic_secs; in gw_write_request()
1976 gw_proc_connect_success(hctx->host, hctx->proc, hctx->conf.debug, r); in gw_write_request()
1978 gw_set_state(hctx, GW_STATE_PREPARE_WRITE); in gw_write_request()
1984 handler_t rc = hctx->create_env(hctx); in gw_write_request()
1987 fdevent_fdnode_event_clr(hctx->ev, hctx->fdn, FDEVENT_OUT); in gw_write_request()
1993 if (AF_UNIX != hctx->host->family) { in gw_write_request()
1995 if (-1 == fdevent_set_tcp_nodelay(hctx->fd, 1)) { in gw_write_request()
2001 hctx->read_ts = log_monotonic_secs; in gw_write_request()
2002 fdevent_fdnode_event_add(hctx->ev, hctx->fdn, FDEVENT_IN|FDEVENT_RDHUP); in gw_write_request()
2003 gw_set_state(hctx, GW_STATE_WRITE); in gw_write_request()
2006 if (!chunkqueue_is_empty(&hctx->wb)) { in gw_write_request()
2009 if (hctx->conf.debug > 1) { in gw_write_request()
2012 hctx->fd, chunkqueue_length(&hctx->wb)); in gw_write_request()
2015 off_t bytes_out = hctx->wb.bytes_out; in gw_write_request()
2016 if (r->con->srv->network_backend_write(hctx->fd, &hctx->wb, in gw_write_request()
2030 (long long)hctx->wb.bytes_out, in gw_write_request()
2031 hctx->proc->connection_name->ptr); in gw_write_request()
2038 else if (hctx->wb.bytes_out > bytes_out) { in gw_write_request()
2039 hctx->write_ts = hctx->proc->last_used = log_monotonic_secs; in gw_write_request()
2040 handler_t rc = gw_write_refill_wb(hctx, r); in gw_write_request()
2045 if (hctx->wb.bytes_out == hctx->wb_reqlen) { in gw_write_request()
2046 fdevent_fdnode_event_clr(hctx->ev, hctx->fdn, FDEVENT_OUT); in gw_write_request()
2047 gw_set_state(hctx, GW_STATE_READ); in gw_write_request()
2049 off_t wblen = chunkqueue_length(&hctx->wb); in gw_write_request()
2050 if ((hctx->wb.bytes_in < hctx->wb_reqlen || hctx->wb_reqlen < 0) in gw_write_request()
2061 fdevent_fdnode_event_clr(hctx->ev, hctx->fdn, FDEVENT_OUT); in gw_write_request()
2063 else if (!(fdevent_fdnode_interest(hctx->fdn) & FDEVENT_OUT)) { in gw_write_request()
2064 hctx->write_ts = log_monotonic_secs; in gw_write_request()
2065 fdevent_fdnode_event_add(hctx->ev, hctx->fdn, FDEVENT_OUT); in gw_write_request()
2071 gw_conditional_tcp_fin(hctx, r); in gw_write_request()
2087 static handler_t gw_backend_error(gw_handler_ctx * const hctx, request_st * const r) in gw_backend_error() argument
2089 if (hctx->backend_error) hctx->backend_error(hctx); in gw_backend_error()
2091 gw_connection_close(hctx, r); in gw_backend_error()
2096 static handler_t gw_recv_response(gw_handler_ctx *hctx, request_st *r);
2100 static handler_t gw_write_error(gw_handler_ctx * const hctx, request_st * const r) { in gw_write_error() argument
2102 if (hctx->state == GW_STATE_INIT || in gw_write_error()
2103 hctx->state == GW_STATE_CONNECT_DELAYED) { in gw_write_error()
2107 if (hctx->proc && hctx->proc->is_local) { in gw_write_error()
2110 gw_restart_dead_procs(hctx->host,srv->errh,hctx->conf.debug,0); in gw_write_error()
2114 if (hctx->reconnects++ < 5) return gw_reconnect(hctx, r); in gw_write_error()
2129 handler_t rc = gw_recv_response(hctx, r); /*(might invalidate hctx)*/ in gw_write_error()
2137 return gw_backend_error(hctx, r); /* HANDLER_FINISHED */ in gw_write_error()
2140 static handler_t gw_send_request(gw_handler_ctx * const hctx, request_st * const r) { in gw_send_request() argument
2141 handler_t rc = gw_write_request(hctx, r); in gw_send_request()
2142 return (HANDLER_ERROR != rc) ? rc : gw_write_error(hctx, r); in gw_send_request()
2148 gw_handler_ctx *hctx = r->plugin_ctx[p->id]; in gw_handle_subrequest() local
2149 if (NULL == hctx) return HANDLER_GO_ON; in gw_handle_subrequest()
2151 const int revents = hctx->revents; in gw_handle_subrequest()
2153 hctx->revents = 0; in gw_handle_subrequest()
2154 handler_t rc = gw_process_fdevent(hctx, r, revents); in gw_handle_subrequest()
2167 fdevent_fdnode_event_clr(hctx->ev, hctx->fdn, FDEVENT_IN); in gw_handle_subrequest()
2169 else if (!(fdevent_fdnode_interest(hctx->fdn) & FDEVENT_IN)) { in gw_handle_subrequest()
2172 rc = gw_recv_response(hctx, r); /*(might invalidate hctx)*/ in gw_handle_subrequest()
2174 hctx->read_ts = log_monotonic_secs; in gw_handle_subrequest()
2175 fdevent_fdnode_event_add(hctx->ev, hctx->fdn, FDEVENT_IN); in gw_handle_subrequest()
2183 if (hctx->gw_mode != GW_AUTHORIZER in gw_handle_subrequest()
2184 && (0 == hctx->wb.bytes_in in gw_handle_subrequest()
2185 ? (r->state == CON_STATE_READ_POST || -1 == hctx->wb_reqlen) in gw_handle_subrequest()
2186 : (hctx->wb.bytes_in < hctx->wb_reqlen || hctx->wb_reqlen < 0))) { in gw_handle_subrequest()
2191 if (chunkqueue_length(&hctx->wb) > 65536 - 4096 in gw_handle_subrequest()
2199 if (hctx->opts.backend == BACKEND_PROXY) { in gw_handle_subrequest()
2200 if (hctx->state == GW_STATE_INIT /* ??? < GW_STATE_WRITE ??? */ in gw_handle_subrequest()
2220 if (hctx->wb_reqlen < -1 && r->reqbody_length >= 0) { in gw_handle_subrequest()
2222 hctx->wb_reqlen = -hctx->wb_reqlen; in gw_handle_subrequest()
2223 if (hctx->stdin_append) { in gw_handle_subrequest()
2224 handler_t rca = hctx->stdin_append(hctx); in gw_handle_subrequest()
2228 chunkqueue_append_chunkqueue(&hctx->wb, &r->reqbody_queue); in gw_handle_subrequest()
2231 if (0 != hctx->wb.bytes_in || -1 == hctx->wb_reqlen) { in gw_handle_subrequest()
2232 handler_t rca = gw_write_refill_wb(hctx, r); in gw_handle_subrequest()
2234 if (fdevent_fdnode_interest(hctx->fdn) & FDEVENT_OUT) { in gw_handle_subrequest()
2243 handler_t rc =((0==hctx->wb.bytes_in || !chunkqueue_is_empty(&hctx->wb)) in gw_handle_subrequest()
2244 && hctx->state != GW_STATE_CONNECT_DELAYED) in gw_handle_subrequest()
2245 ? gw_send_request(hctx, r) in gw_handle_subrequest()
2251 gw_conditional_tcp_fin(hctx, r); in gw_handle_subrequest()
2257 static handler_t gw_authorizer_ok(gw_handler_ctx * const hctx, request_st * const r) { in gw_authorizer_ok() argument
2265 gw_host * const host = hctx->host; in gw_authorizer_ok()
2276 r->conf.stream_response_body |= (hctx->opts.authorizer >> 1); in gw_authorizer_ok()
2278 gw_backend_close(hctx, r); in gw_authorizer_ok()
2279 handler_ctx_clear(hctx); in gw_authorizer_ok()
2307 static handler_t gw_recv_response_error(gw_handler_ctx * const hctx, request_st * const r, gw_proc …
2310 static handler_t gw_recv_response(gw_handler_ctx * const hctx, request_st * const r) { in gw_recv_response() argument
2312 buffer *b = (hctx->opts.backend == BACKEND_FASTCGI in gw_recv_response()
2313 || hctx->opts.backend == BACKEND_AJP13) in gw_recv_response()
2315 : hctx->response; in gw_recv_response()
2318 handler_t rc = http_response_read(r, &hctx->opts, b, hctx->fdn); in gw_recv_response()
2320 if (b != hctx->response) chunk_buffer_release(b); in gw_recv_response()
2322 gw_proc * const proc = hctx->proc; in gw_recv_response()
2332 hctx->read_ts = proc->last_used = log_monotonic_secs; in gw_recv_response()
2337 if (hctx->gw_mode == GW_AUTHORIZER in gw_recv_response()
2339 return gw_authorizer_ok(hctx, r); in gw_recv_response()
2341 gw_connection_close(hctx, r); in gw_recv_response()
2345 return gw_recv_response_error(hctx, r, proc); in gw_recv_response()
2351 static handler_t gw_recv_response_error(gw_handler_ctx * const hctx, request_st * const r, gw_proc … in gw_recv_response_error() argument
2355 if (proc->is_local && 1 == proc->load && proc->pid == hctx->pid in gw_recv_response_error()
2359 gw_host * const host = hctx->host; in gw_recv_response_error()
2363 if (hctx->conf.debug) { in gw_recv_response_error()
2369 if (gw_spawn_connection(host, proc, errh, hctx->conf.debug)) { in gw_recv_response_error()
2379 if (hctx->wb.bytes_out == 0 && hctx->reconnects++ < 5) { in gw_recv_response_error()
2386 return gw_reconnect(hctx, r); in gw_recv_response_error()
2392 (long long)hctx->wb.bytes_out, proc->connection_name->ptr, in gw_recv_response_error()
2403 return gw_backend_error(hctx, r); /* HANDLER_FINISHED */ in gw_recv_response_error()
2408 gw_handler_ctx *hctx = ctx; in gw_handle_fdevent() local
2409 hctx->revents |= revents; in gw_handle_fdevent()
2410 joblist_append(hctx->con); in gw_handle_fdevent()
2414 static handler_t gw_process_fdevent(gw_handler_ctx * const hctx, request_st * const r, int revents)… in gw_process_fdevent() argument
2416 handler_t rc = gw_recv_response(hctx, r); /*(might invalidate hctx)*/ in gw_process_fdevent()
2421 return gw_send_request(hctx, r); /*(might invalidate hctx)*/ in gw_process_fdevent()
2426 if (hctx->state == GW_STATE_CONNECT_DELAYED) { in gw_process_fdevent()
2427 return gw_send_request(hctx, r); /*(might invalidate hctx)*/ in gw_process_fdevent()
2439 rc = gw_recv_response(hctx, r); /*(might invalidate hctx)*/ in gw_process_fdevent()
2444 gw_proc *proc = hctx->proc; in gw_process_fdevent()
2449 proc->connection_name->ptr, hctx->state); in gw_process_fdevent()
2451 gw_connection_close(hctx, r); in gw_process_fdevent()
2457 return gw_backend_error(hctx, r); /* HANDLER_FINISHED */ in gw_process_fdevent()
2474 gw_handler_ctx *hctx; in gw_check_extension() local
2482 hctx = r->plugin_ctx[p->id]; in gw_check_extension()
2484 gw_mode = (NULL == hctx || NULL == hctx->ext_auth) in gw_check_extension()
2632 if (!hctx) hctx = handler_ctx_init(hctx_sz); in gw_check_extension()
2634 hctx->ev = r->con->srv->ev; in gw_check_extension()
2635 hctx->r = r; in gw_check_extension()
2636 hctx->con = r->con; in gw_check_extension()
2637 hctx->plugin_data = p; in gw_check_extension()
2638 hctx->host = host; in gw_check_extension()
2639 hctx->proc = NULL; in gw_check_extension()
2640 hctx->ext = extension; in gw_check_extension()
2643 hctx->gw_mode = gw_mode; in gw_check_extension()
2645 hctx->ext_auth = hctx->ext; in gw_check_extension()
2652 hctx->conf.balance = p->conf.balance; in gw_check_extension()
2653 hctx->conf.proto = p->conf.proto; in gw_check_extension()
2654 hctx->conf.debug = p->conf.debug; in gw_check_extension()
2656 hctx->opts.max_per_read = in gw_check_extension()
2663 hctx->opts.fdfmt = S_IFSOCK; in gw_check_extension()
2664 hctx->opts.authorizer = (gw_mode == GW_AUTHORIZER); in gw_check_extension()
2665 hctx->opts.local_redir = 0; in gw_check_extension()
2666 hctx->opts.xsendfile_allow = host->xsendfile_allow; in gw_check_extension()
2667 hctx->opts.xsendfile_docroot = host->xsendfile_docroot; in gw_check_extension()
2669 r->plugin_ctx[p->id] = hctx; in gw_check_extension()
2683 static void gw_handle_trigger_hctx_timeout(gw_handler_ctx * const hctx, const char * const msg) { in gw_handle_trigger_hctx_timeout() argument
2685 request_st * const r = hctx->r; in gw_handle_trigger_hctx_timeout()
2690 gw_proc_connect_error(r, hctx->host, hctx->proc, hctx->pid, in gw_handle_trigger_hctx_timeout()
2691 ETIMEDOUT, hctx->conf.debug); in gw_handle_trigger_hctx_timeout()
2694 if (hctx->reconnects++ < 1) { in gw_handle_trigger_hctx_timeout()
2695 gw_reconnect(hctx, r); in gw_handle_trigger_hctx_timeout()
2710 msg, hctx->proc->connection_name->ptr, hctx->fd); in gw_handle_trigger_hctx_timeout()
2713 gw_write_error(hctx, r); /*(calls gw_backend_error())*/ in gw_handle_trigger_hctx_timeout()
2718 gw_backend_error(hctx, r); in gw_handle_trigger_hctx_timeout()
2734 for (gw_handler_ctx *hctx = host->hctxs, *next; hctx; hctx = next) { in gw_handle_trigger_host_timeouts() local
2737 next = hctx->next; in gw_handle_trigger_host_timeouts()
2739 if (hctx->state == GW_STATE_CONNECT_DELAYED) { in gw_handle_trigger_host_timeouts()
2740 if (mono - hctx->write_ts > csecs && csecs) /*(waiting for write)*/ in gw_handle_trigger_host_timeouts()
2741 gw_handle_trigger_hctx_timeout(hctx, "connect"); in gw_handle_trigger_host_timeouts()
2745 const int events = fdevent_fdnode_interest(hctx->fdn); in gw_handle_trigger_host_timeouts()
2746 if ((events & FDEVENT_IN) && mono - hctx->read_ts > rsecs && rsecs) { in gw_handle_trigger_host_timeouts()
2747 gw_handle_trigger_hctx_timeout(hctx, "read"); in gw_handle_trigger_host_timeouts()
2750 if ((events & FDEVENT_OUT) && mono - hctx->write_ts > wsecs && wsecs) { in gw_handle_trigger_host_timeouts()
2751 gw_handle_trigger_hctx_timeout(hctx, "write"); in gw_handle_trigger_host_timeouts()