static liHandlerResult proxy_handle(liVRequest *vr, gpointer param, gpointer *context) { liBackendWait *bwait = (liBackendWait*) *context; liBackendConnection *bcon = NULL; proxy_context *ctx = (proxy_context*) param; liBackendResult bres; if (li_vrequest_is_handled(vr)) return LI_HANDLER_GO_ON; LI_VREQUEST_WAIT_FOR_REQUEST_BODY(vr); if (vr->request.content_length < 0) { VR_ERROR(vr, "%s", "proxy can't handle progressive uploads yet. enable request body buffering!"); return LI_HANDLER_ERROR; } bres = li_backend_get(vr, ctx->pool, &bcon, &bwait); *context = bwait; switch (bres) { case LI_BACKEND_SUCCESS: LI_FORCE_ASSERT(NULL == bwait); LI_FORCE_ASSERT(NULL != bcon); break; case LI_BACKEND_WAIT: LI_FORCE_ASSERT(NULL != bwait); return LI_HANDLER_WAIT_FOR_EVENT; case LI_BACKEND_TIMEOUT: li_vrequest_backend_dead(vr); return LI_HANDLER_GO_ON; } proxy_connection_new(vr, bcon, ctx); return LI_HANDLER_GO_ON; }
static liHandlerResult proxy_handle(liVRequest *vr, gpointer param, gpointer *context) { proxy_context *ctx = (proxy_context*) param; proxy_connection *pcon; UNUSED(context); if (!li_vrequest_handle_indirect(vr, ctx->plugin)) return LI_HANDLER_GO_ON; pcon = proxy_connection_new(vr, ctx); if (!pcon) { return LI_HANDLER_ERROR; } g_ptr_array_index(vr->plugin_ctx, ctx->plugin->id) = pcon; li_chunkqueue_set_limit(pcon->proxy_in, vr->out->limit); li_chunkqueue_set_limit(pcon->proxy_out, vr->in->limit); if (vr->out->limit) vr->out->limit->io_watcher = &pcon->fd_watcher; return proxy_statemachine(vr, pcon); }