Lines Matching refs:downstream
247 auto downstream =
249 nghttp3_conn_set_stream_user_data(httpconn_, stream_id, downstream.get());
251 downstream->reset_upstream_rtimer();
255 auto &req = downstream->request();
259 add_pending_downstream(std::move(downstream));
263 std::unique_ptr<Downstream> downstream) {
264 downstream_queue_.add_pending(std::move(downstream));
1016 int Http3Upstream::on_timeout(Downstream *downstream) { return 0; }
1018 int Http3Upstream::on_downstream_abort_request(Downstream *downstream,
1022 rv = error_reply(downstream, status_code);
1034 Downstream *downstream) {
1056 auto downstream = dconn->get_downstream();
1058 if (downstream->get_response_state() == DownstreamState::MSG_RESET) {
1059 // The downstream stream was reset (canceled). In this case,
1060 // RST_STREAM to the upstream and delete downstream connection
1061 // here. Deleting downstream will be taken place at
1063 shutdown_stream(downstream,
1065 downstream->get_response_rst_stream_error_code()));
1066 downstream->pop_downstream_connection();
1069 } else if (downstream->get_response_state() ==
1071 if (error_reply(downstream, 502) != 0) {
1074 downstream->pop_downstream_connection();
1078 auto rv = downstream->on_read();
1080 if (downstream->get_request_header_sent()) {
1086 downstream->pop_downstream_connection();
1099 if (downstream->can_detach_downstream_connection()) {
1101 downstream->detach_downstream_connection();
1107 // At this point, downstream may be deleted.
1125 auto downstream = dconn->get_downstream();
1128 DCLOG(INFO, dconn) << "EOF. stream_id=" << downstream->get_stream_id();
1131 // Delete downstream connection. If we don't delete it here, it will
1133 downstream->pop_downstream_connection();
1136 // downstream will be deleted in on_stream_close_callback.
1137 if (downstream->get_response_state() == DownstreamState::HEADER_COMPLETE) {
1142 downstream->set_response_state(DownstreamState::MSG_COMPLETE);
1148 if (on_downstream_body_complete(downstream) != 0) {
1151 } else if (downstream->get_response_state() !=
1154 // on_stream_close_callback delete downstream.
1155 if (error_reply(downstream, 502) != 0) {
1160 // At this point, downstream may be deleted.
1165 auto downstream = dconn->get_downstream();
1173 if (downstream->get_upgraded()) {
1178 // Delete downstream connection. If we don't delete it here, it will
1180 downstream->pop_downstream_connection();
1184 if (downstream->get_response_state() == DownstreamState::MSG_COMPLETE) {
1188 if (downstream->get_upgraded()) {
1189 shutdown_stream(downstream, NGHTTP3_H3_NO_ERROR);
1192 if (downstream->get_response_state() == DownstreamState::HEADER_COMPLETE) {
1193 if (downstream->get_upgraded()) {
1194 if (on_downstream_body_complete(downstream) != 0) {
1198 shutdown_stream(downstream, NGHTTP3_H3_INTERNAL_ERROR);
1203 if (downstream->get_request_header_sent()) {
1211 if (error_reply(downstream, status) != 0) {
1215 downstream->set_response_state(DownstreamState::MSG_COMPLETE);
1218 // At this point, downstream may be deleted.
1231 auto downstream = static_cast<Downstream *>(stream_user_data);
1233 assert(downstream);
1235 auto body = downstream->get_response_buf();
1239 if (downstream->get_response_state() != DownstreamState::MSG_COMPLETE &&
1241 downstream->disable_upstream_wtimer();
1245 downstream->reset_upstream_wtimer();
1249 if (downstream->get_response_state() == DownstreamState::MSG_COMPLETE &&
1256 downstream->response_sent_body_length += nghttp3_vec_len(vec, veccnt);
1267 int Http3Upstream::on_downstream_header_complete(Downstream *downstream) {
1270 const auto &req = downstream->request();
1271 auto &resp = downstream->response();
1273 auto &balloc = downstream->get_block_allocator();
1276 if (downstream->get_non_final_response()) {
1277 DLOG(INFO, downstream) << "HTTP non-final response header";
1279 DLOG(INFO, downstream) << "HTTP response header completed";
1287 downstream->rewrite_location_response_header(req.scheme);
1291 if (!downstream->get_non_final_response()) {
1292 auto dconn = downstream->get_downstream_connection();
1297 if (dmruby_ctx->run_on_response_proc(downstream) != 0) {
1298 if (error_reply(downstream, 500) != 0) {
1305 if (downstream->get_response_state() == DownstreamState::MSG_COMPLETE) {
1313 if (mruby_ctx->run_on_response_proc(downstream) != 0) {
1314 if (error_reply(downstream, 500) != 0) {
1321 if (downstream->get_response_state() == DownstreamState::MSG_COMPLETE) {
1333 if (downstream->get_non_final_response()) {
1342 log_response_headers(downstream, nva);
1345 rv = nghttp3_conn_submit_info(httpconn_, downstream->get_stream_id(),
1381 if (!req.regular_connect_method() || !downstream->get_upgraded()) {
1382 auto affinity_cookie = downstream->get_affinity_cookie_to_send();
1384 auto dconn = downstream->get_downstream_connection();
1427 log_response_headers(downstream, nva);
1435 if (downstream->expect_response_body() ||
1436 downstream->expect_response_trailer()) {
1442 rv = nghttp3_conn_submit_response(httpconn_, downstream->get_stream_id(),
1450 downstream->reset_upstream_wtimer();
1451 } else if (shutdown_stream_read(downstream->get_stream_id(),
1459 int Http3Upstream::on_downstream_body(Downstream *downstream,
1462 auto body = downstream->get_response_buf();
1466 nghttp3_conn_resume_stream(httpconn_, downstream->get_stream_id());
1468 downstream->ensure_upstream_wtimer();
1474 int Http3Upstream::on_downstream_body_complete(Downstream *downstream) {
1476 DLOG(INFO, downstream) << "HTTP response completed";
1479 auto &resp = downstream->response();
1481 if (!downstream->validate_response_recv_body_length()) {
1482 shutdown_stream(downstream, NGHTTP3_H3_GENERAL_PROTOCOL_ERROR);
1487 if (!downstream->get_upgraded()) {
1495 httpconn_, downstream->get_stream_id(), nva.data(), nva.size());
1505 nghttp3_conn_resume_stream(httpconn_, downstream->get_stream_id());
1506 downstream->ensure_upstream_wtimer();
1584 int Http3Upstream::on_downstream_reset(Downstream *downstream, bool no_retry) {
1587 if (downstream->get_dispatch_state() != DispatchState::ACTIVE) {
1592 downstream->pop_downstream_connection();
1598 if (!downstream->request_submission_ready()) {
1599 if (downstream->get_response_state() == DownstreamState::MSG_COMPLETE) {
1601 downstream->pop_downstream_connection();
1605 shutdown_stream(downstream, NGHTTP3_H3_INTERNAL_ERROR);
1606 downstream->pop_downstream_connection();
1613 downstream->pop_downstream_connection();
1615 downstream->add_retry();
1621 if (no_retry || downstream->no_more_retry()) {
1625 // downstream connection is clean; we can retry with new
1626 // downstream connection.
1629 auto dconn = handler_->get_downstream_connection(rv, downstream);
1634 rv = downstream->attach_downstream_connection(std::move(dconn));
1640 rv = downstream->push_request_headers();
1653 rv = on_downstream_abort_request(downstream, 502);
1655 shutdown_stream(downstream, NGHTTP3_H3_INTERNAL_ERROR);
1657 downstream->pop_downstream_connection();
1666 int Http3Upstream::resume_read(IOCtrlReason reason, Downstream *downstream,
1668 consume(downstream->get_stream_id(), consumed);
1670 auto &req = downstream->request();
1679 int Http3Upstream::send_reply(Downstream *downstream, const uint8_t *body,
1690 const auto &resp = downstream->response();
1694 auto &balloc = downstream->get_block_allocator();
1729 rv = nghttp3_conn_submit_response(httpconn_, downstream->get_stream_id(),
1737 auto buf = downstream->get_response_buf();
1741 downstream->set_response_state(DownstreamState::MSG_COMPLETE);
1744 downstream->reset_upstream_wtimer();
1747 if (shutdown_stream_read(downstream->get_stream_id(), NGHTTP3_H3_NO_ERROR) !=
1755 int Http3Upstream::initiate_push(Downstream *downstream, const StringRef &uri) {
1768 Http3Upstream::on_downstream_push_promise(Downstream *downstream,
1774 Downstream *downstream, Downstream *promised_downstream) {
2035 auto downstream = static_cast<Downstream *>(stream_user_data);
2037 assert(downstream);
2039 if (upstream->http_acked_stream_data(downstream, datalen) != 0) {
2047 int Http3Upstream::http_acked_stream_data(Downstream *downstream,
2050 ULOG(INFO, this) << "Stream " << downstream->get_stream_id() << " "
2054 auto body = downstream->get_response_buf();
2060 if (downstream->resume_read(SHRPX_NO_BUFFER, datalen) != 0) {
2087 auto downstream = static_cast<Downstream *>(stream_user_data);
2089 if (!downstream || downstream->get_stop_reading()) {
2093 if (upstream->http_recv_request_header(downstream, token, name, value, flags,
2108 auto downstream = static_cast<Downstream *>(stream_user_data);
2110 if (!downstream || downstream->get_stop_reading()) {
2114 if (upstream->http_recv_request_header(downstream, token, name, value, flags,
2123 int Http3Upstream::http_recv_request_header(Downstream *downstream,
2130 auto &req = downstream->request();
2137 downstream->set_stop_reading(true);
2139 if (downstream->get_response_state() == DownstreamState::MSG_COMPLETE) {
2154 if (error_reply(downstream, 431) != 0) {
2164 downstream->add_rcbuf(name);
2165 downstream->add_rcbuf(value);
2185 auto downstream = static_cast<Downstream *>(stream_user_data);
2187 if (!downstream || downstream->get_stop_reading()) {
2191 if (upstream->http_end_request_headers(downstream, fin) != 0) {
2195 downstream->reset_upstream_rtimer();
2202 int Http3Upstream::http_end_request_headers(Downstream *downstream, int fin) {
2205 auto &req = downstream->request();
2208 if (downstream->get_response_state() == DownstreamState::MSG_COMPLETE) {
2224 << downstream->get_stream_id() << "\n"
2242 if (error_reply(downstream, 501) != 0) {
2255 shutdown_stream(downstream, NGHTTP3_H3_GENERAL_PROTOCOL_ERROR);
2282 req.path = http2::rewrite_clean_path(downstream->get_block_allocator(),
2290 if (error_reply(downstream, 400) != 0) {
2304 downstream->inspect_http2_request();
2306 downstream->set_request_state(DownstreamState::HEADER_COMPLETE);
2310 if (error_reply(downstream, 400) != 0) {
2319 if (mruby_ctx->run_on_request_proc(downstream) != 0) {
2320 if (error_reply(downstream, 500) != 0) {
2327 if (downstream->get_response_state() == DownstreamState::MSG_COMPLETE) {
2331 start_downstream(downstream);
2336 void Http3Upstream::start_downstream(Downstream *downstream) {
2337 if (downstream_queue_.can_activate(downstream->request().authority)) {
2338 initiate_downstream(downstream);
2342 downstream_queue_.mark_blocked(downstream);
2345 void Http3Upstream::initiate_downstream(Downstream *downstream) {
2353 auto dconn = handler_->get_downstream_connection(rv, downstream);
2360 rv = error_reply(downstream, 502);
2362 shutdown_stream(downstream, NGHTTP3_H3_INTERNAL_ERROR);
2365 downstream->set_request_state(DownstreamState::CONNECT_FAIL);
2366 downstream_queue_.mark_failure(downstream);
2374 rv = downstream->attach_downstream_connection(std::move(dconn));
2384 if (mruby_ctx->run_on_request_proc(downstream) != 0) {
2385 if (error_reply(downstream, 500) != 0) {
2386 shutdown_stream(downstream, NGHTTP3_H3_INTERNAL_ERROR);
2389 downstream_queue_.mark_failure(downstream);
2394 if (downstream->get_response_state() == DownstreamState::MSG_COMPLETE) {
2400 rv = downstream->push_request_headers();
2403 if (error_reply(downstream, 502) != 0) {
2404 shutdown_stream(downstream, NGHTTP3_H3_INTERNAL_ERROR);
2407 downstream_queue_.mark_failure(downstream);
2412 downstream_queue_.mark_active(downstream);
2414 auto &req = downstream->request();
2416 rv = downstream->end_upload_data();
2418 shutdown_stream(downstream, NGHTTP3_H3_INTERNAL_ERROR);
2427 auto downstream = static_cast<Downstream *>(stream_user_data);
2429 if (upstream->http_recv_data(downstream, data, datalen) != 0) {
2437 int Http3Upstream::http_recv_data(Downstream *downstream, const uint8_t *data,
2439 downstream->reset_upstream_rtimer();
2441 if (downstream->push_upload_data_chunk(data, datalen) != 0) {
2442 if (downstream->get_response_state() != DownstreamState::MSG_COMPLETE) {
2443 shutdown_stream(downstream, NGHTTP3_H3_INTERNAL_ERROR);
2446 consume(downstream->get_stream_id(), datalen);
2458 auto downstream = static_cast<Downstream *>(stream_user_data);
2460 if (!downstream || downstream->get_stop_reading()) {
2464 if (upstream->http_end_stream(downstream) != 0) {
2472 int Http3Upstream::http_end_stream(Downstream *downstream) {
2473 downstream->disable_upstream_rtimer();
2475 if (downstream->end_upload_data() != 0) {
2476 if (downstream->get_response_state() != DownstreamState::MSG_COMPLETE) {
2477 shutdown_stream(downstream, NGHTTP3_H3_INTERNAL_ERROR);
2481 downstream->set_request_state(DownstreamState::MSG_COMPLETE);
2491 auto downstream = static_cast<Downstream *>(stream_user_data);
2493 if (!downstream) {
2497 if (upstream->http_stream_close(downstream, app_error_code) != 0) {
2505 int Http3Upstream::http_stream_close(Downstream *downstream,
2507 auto stream_id = downstream->get_stream_id();
2514 auto body = downstream->get_response_buf();
2520 auto &req = downstream->request();
2528 if (downstream->get_request_state() == DownstreamState::CONNECT_FAIL) {
2529 remove_downstream(downstream);
2530 // downstream was deleted
2535 if (downstream->can_detach_downstream_connection()) {
2537 downstream->detach_downstream_connection();
2540 downstream->set_request_state(DownstreamState::STREAM_CLOSED);
2542 // At this point, downstream read may be paused.
2546 remove_downstream(downstream);
2547 // downstream was deleted
2692 int Http3Upstream::error_reply(Downstream *downstream,
2695 auto &resp = downstream->response();
2697 auto &balloc = downstream->get_block_allocator();
2701 auto body = downstream->get_response_buf();
2703 downstream->set_response_state(DownstreamState::MSG_COMPLETE);
2722 rv = nghttp3_conn_submit_response(httpconn_, downstream->get_stream_id(),
2730 downstream->reset_upstream_wtimer();
2732 if (shutdown_stream_read(downstream->get_stream_id(), NGHTTP3_H3_NO_ERROR) !=
2740 int Http3Upstream::shutdown_stream(Downstream *downstream,
2742 auto stream_id = downstream->get_stream_id();
2777 void Http3Upstream::remove_downstream(Downstream *downstream) {
2778 if (downstream->accesslog_ready()) {
2779 handler_->write_accesslog(downstream);
2782 nghttp3_conn_set_stream_user_data(httpconn_, downstream->get_stream_id(),
2785 auto next_downstream = downstream_queue_.remove_and_get_blocked(downstream);
2792 // There is no downstream at the moment. Start idle timer now.
2798 Downstream *downstream, const std::vector<nghttp3_nv> &nva) const {
2805 << downstream->get_stream_id() << "\n"