static ngx_int_t ngx_stream_lua_socket_udp_resume(ngx_stream_session_t *s, ngx_stream_lua_ctx_t *ctx) { int nret; lua_State *vm; ngx_int_t rc; ngx_connection_t *c; ngx_stream_lua_co_ctx_t *coctx; ngx_stream_lua_socket_udp_upstream_t *u; ctx->resume_handler = ngx_stream_lua_wev_handler; ngx_log_debug0(NGX_LOG_DEBUG_STREAM, s->connection->log, 0, "stream lua udp operation done, resuming lua thread"); coctx = ctx->cur_co_ctx; #if 0 ngx_stream_lua_probe_info("udp resume"); #endif u = coctx->data; ngx_log_debug2(NGX_LOG_DEBUG_STREAM, s->connection->log, 0, "stream lua udp socket calling prepare retvals handler %p, " "u:%p", u->prepare_retvals, u); nret = u->prepare_retvals(s, u, ctx->cur_co_ctx->co); if (nret == NGX_AGAIN) { return NGX_DONE; } c = s->connection; vm = ngx_stream_lua_get_lua_vm(s, ctx); rc = ngx_stream_lua_run_thread(vm, s, ctx, nret); ngx_log_debug1(NGX_LOG_DEBUG_STREAM, s->connection->log, 0, "stream lua run thread returned %d", rc); if (rc == NGX_AGAIN) { return ngx_stream_lua_run_posted_threads(c, vm, s, ctx); } if (rc == NGX_DONE) { ngx_stream_lua_finalize_session(s, NGX_DONE); return ngx_stream_lua_run_posted_threads(c, vm, s, ctx); } if (ctx->entered_content_phase) { ngx_stream_lua_finalize_session(s, rc); return NGX_DONE; } return rc; }
ngx_int_t ngx_stream_lua_flush_resume_helper(ngx_stream_session_t *s, ngx_stream_lua_ctx_t *ctx) { int n; lua_State *vm; ngx_int_t rc; ngx_connection_t *c; c = s->connection; ctx->cur_co_ctx->cleanup = NULL; /* push the return values */ if (c->timedout) { lua_pushnil(ctx->cur_co_ctx->co); lua_pushliteral(ctx->cur_co_ctx->co, "timeout"); n = 2; } else if (c->error) { lua_pushnil(ctx->cur_co_ctx->co); lua_pushliteral(ctx->cur_co_ctx->co, "client aborted"); n = 2; } else { lua_pushinteger(ctx->cur_co_ctx->co, 1); n = 1; } vm = ngx_stream_lua_get_lua_vm(s, ctx); rc = ngx_stream_lua_run_thread(vm, s, ctx, n); ngx_log_debug1(NGX_LOG_DEBUG_STREAM, s->connection->log, 0, "stream lua run thread returned %d", rc); if (rc == NGX_AGAIN) { return ngx_stream_lua_run_posted_threads(c, vm, s, ctx); } if (rc == NGX_DONE) { ngx_stream_lua_finalize_session(s, NGX_DONE); return ngx_stream_lua_run_posted_threads(c, vm, s, ctx); } /* rc == NGX_ERROR || rc >= NGX_OK */ if (ctx->entered_content_phase) { ngx_stream_lua_finalize_session(s, rc); return NGX_DONE; } return rc; }