static mrb_value ap_mrb_run_handler(mrb_state *mrb, mrb_value self) { request_rec *r = ap_mrb_get_request(); apr_status_t result = ap_invoke_handler(r); if (result != APR_SUCCESS) { ap_log_error(APLOG_MARK, APLOG_WARNING, 0, NULL, "%s ERROR %s: ap_run_handler failed", MODULE_NAME, __func__); r->connection->aborted = 1; } return self; }
void ServerFunc(TConn *c) { TRequest r; uint32 ka = 0; /* sanity */ if (!c) { return; } ka=c->server->keepalivemaxconn; c->pool = ap_make_sub_pool( c->server->pool ); c->server->stat_conns++; RequestInit(&r,c); /* tell connection handlers - new connection */ ap_conn_init_modules( c ); while (ka--) { c->start_time = ap_time(); /* Wait to read until timeout */ if (!ConnRead(c,c->server->keepalivetimeout)) { break; } /* CODE_PROBE_1("Server - Req Read Start (%x)",c); */ if (RequestRead(&r)) { /* Check if it is the last keepalive */ if (ka==1) { r.keepalive=FALSE; } r.cankeepalive=r.keepalive; if (r.status==0) { if (r.versionmajor>=2) { ResponseStatus(&r,505); } else if (!RequestValidURI(&r)) { ResponseStatus(&r,400); } else { if( ap_invoke_handler( &r ) == DECLINED ) { ((HANDLER)(c->server->defaulthandler))(&r); } } } } /* CODE_PROBE_1("Server - Req Read End (%x)",c); */ HTTPWriteEnd(&r); ConnWriteFlush( c ); if (!r.done) ResponseError(&r); RequestLog(&r); /* do flow stat update */ c->server->stat_inbytes += c->inbytes; c->server->stat_outbytes += c->outbytes; c->server->stat_data_time += ap_time() - c->start_time; if( c->server->stopped ) { break; } if (!(r.keepalive && r.cankeepalive)) { break; } RequestReset(&r,c); ConnReadInit(c); /* CODE_PROBE_1("Server - ConnReadInit - Bottom (%x)",c); */ } /* tell connection handlers session complete */ ap_conn_exit_modules( c ); ap_destroy_pool( c->pool ); RequestFree(&r); SocketClose(&(c->socket)); }