diff --git a/plugins/router_uwsgi/router_uwsgi.c b/plugins/router_uwsgi/router_uwsgi.c index d4fc556f..9fca0311 100644 --- a/plugins/router_uwsgi/router_uwsgi.c +++ b/plugins/router_uwsgi/router_uwsgi.c @@ -35,7 +35,13 @@ static int uwsgi_routing_func_uwsgi_remote(struct wsgi_request *wsgi_req, struct struct uwsgi_header *uh = (struct uwsgi_header *) ur->data; char *addr = ur->data + sizeof(struct uwsgi_header); - + + char **subject = (char **) (((char *)(wsgi_req))+ur->subject); + uint16_t *subject_len = (uint16_t *) (((char *)(wsgi_req))+ur->subject_len); + + struct uwsgi_buffer *ub_addr = uwsgi_routing_translate(wsgi_req, ur, *subject, *subject_len, addr, strlen(addr)); + if (!ub_addr) return UWSGI_ROUTE_BREAK; + // mark a route request wsgi_req->via = UWSGI_VIA_ROUTE; @@ -66,18 +72,20 @@ static int uwsgi_routing_func_uwsgi_remote(struct wsgi_request *wsgi_req, struct goto end; } } - if (!uwsgi_offload_request_net_do(wsgi_req, addr, ub)) { + if (!uwsgi_offload_request_net_do(wsgi_req, ub_addr->buf, ub)) { wsgi_req->via = UWSGI_VIA_OFFLOAD; wsgi_req->status = 202; + uwsgi_buffer_destroy(ub_addr); return UWSGI_ROUTE_BREAK; } } - if (uwsgi_proxy_nb(wsgi_req, addr, ub, remains, uwsgi.socket_timeout)) { - uwsgi_log("error routing request to uwsgi server %s\n", addr); + if (uwsgi_proxy_nb(wsgi_req, ub_addr->buf, ub, remains, uwsgi.socket_timeout)) { + uwsgi_log("error routing request to uwsgi server %s\n", ub_addr->buf); } end: uwsgi_buffer_destroy(ub); + uwsgi_buffer_destroy(ub_addr); return UWSGI_ROUTE_BREAK; }