int connection_proxy_req_parse(Connection *conn) { int rc = 0; Host *target_host = conn->req->target_host; Backend *req_action = conn->req->action; check_debug(!IOBuf_closed(conn->iob), "Client closed, goodbye."); rc = Connection_read_header(conn, conn->req); check_debug(rc > 0, "Failed to read another header."); error_unless(Request_is_http(conn->req), conn, 400, "Someone tried to change the protocol on us from HTTP."); Backend *found = Host_match_backend(target_host, Request_path(conn->req), NULL); error_unless(found, conn, 404, "Handler not found: %s", bdata(Request_path(conn->req))); // break out of PROXY if the actions don't match if(found != req_action) { Request_set_action(conn->req, found); return Connection_backend_event(found, conn); } else { return HTTP_REQ; } error_response(conn, 500, "Invalid code branch, tell Zed."); error: return REMOTE_CLOSE; }
int connection_route_request(Connection *conn) { Host *host = NULL; Route *route = NULL; bstring path = Request_path(conn->req); if(conn->req->host_name) { host = Server_match_backend(conn->server, conn->req->host_name); } else { host = conn->server->default_host; } error_unless(host, conn, 404, "Request for a host we don't have registered: %s", bdata(conn->req->host_name)); Backend *found = Host_match_backend(host, path, &route); error_unless(found, conn, 404, "Handler not found: %s", bdata(path)); Request_set_action(conn->req, found); conn->req->target_host = host; conn->req->pattern = route->pattern; conn->req->prefix = route->prefix; return Connection_backend_event(found, conn); error: return CLOSE; }
int connection_route_request(Connection *conn) { Host *host = NULL; Route *route = NULL; bstring path = Request_path(conn->req); check_debug(path != NULL, "No path given, in request, ignoring."); Server *server = Server_queue_latest(); check(server != NULL, "No server in the server queue, tell Zed."); if(conn->req->host_name) { host = Server_match_backend(server, conn->req->host_name); } else { host = server->default_host; } error_unless(host, conn, 404, "Request for a host we don't have registered: %s", bdata(conn->req->host_name)); Backend *found = Host_match_backend(host, path, &route); error_unless(found, conn, 404, "Handler not found: %s", bdata(path)); Request_set_action(conn->req, found); conn->req->target_host = host; conn->req->pattern = route->pattern; conn->req->prefix = route->prefix; return Connection_backend_event(found, conn); error: return CLOSE; }