Lines Matching refs:downstream
67 auto downstream = static_cast<Downstream *>(
70 if (!downstream) {
74 auto &req = downstream->request();
80 if (downstream->get_request_state() == DownstreamState::CONNECT_FAIL) {
81 upstream->remove_downstream(downstream);
82 // downstream was deleted
87 if (downstream->can_detach_downstream_connection()) {
89 downstream->detach_downstream_connection();
92 downstream->set_request_state(DownstreamState::STREAM_CLOSED);
94 // At this point, downstream read may be paused.
98 upstream->remove_downstream(downstream);
99 // downstream was deleted
131 auto downstream = http->pop_downstream();
132 downstream->reset_upstream(this);
133 downstream->set_stream_id(1);
134 downstream->reset_upstream_rtimer();
135 downstream->set_stream_id(1);
137 auto ptr = downstream.get();
140 downstream_queue_.add_pending(std::move(downstream));
177 auto downstream = static_cast<Downstream *>(
179 if (!downstream) {
183 auto &req = downstream->request();
190 if (downstream->get_response_state() == DownstreamState::MSG_COMPLETE) {
205 if (upstream->error_reply(downstream, 431) != 0) {
215 downstream->add_rcbuf(name);
216 downstream->add_rcbuf(value);
239 auto downstream = static_cast<Downstream *>(
241 if (!downstream) {
255 upstream->rst_stream(downstream, NGHTTP2_PROTOCOL_ERROR);
281 auto downstream = std::make_unique<Downstream>(this, handler_->get_mcpool(),
284 downstream.get());
286 downstream->reset_upstream_rtimer();
290 auto &req = downstream->request();
297 add_pending_downstream(std::move(downstream));
308 int Http2Upstream::on_request_headers(Downstream *downstream,
312 auto &req = downstream->request();
315 if (downstream->get_response_state() == DownstreamState::MSG_COMPLETE) {
331 << downstream->get_stream_id() << "\n"
356 if (error_reply(downstream, 501) != 0) {
367 rst_stream(downstream, NGHTTP2_PROTOCOL_ERROR);
394 req.path = http2::rewrite_clean_path(downstream->get_block_allocator(),
402 if (error_reply(downstream, 400) != 0) {
418 downstream->inspect_http2_request();
420 downstream->set_request_state(DownstreamState::HEADER_COMPLETE);
424 if (error_reply(downstream, 400) != 0) {
434 if (mruby_ctx->run_on_request_proc(downstream) != 0) {
435 if (error_reply(downstream, 500) != 0) {
443 downstream->disable_upstream_rtimer();
445 downstream->set_request_state(DownstreamState::MSG_COMPLETE);
448 if (downstream->get_response_state() == DownstreamState::MSG_COMPLETE) {
452 start_downstream(downstream);
457 void Http2Upstream::start_downstream(Downstream *downstream) {
458 if (downstream_queue_.can_activate(downstream->request().authority)) {
459 initiate_downstream(downstream);
463 downstream_queue_.mark_blocked(downstream);
466 void Http2Upstream::initiate_downstream(Downstream *downstream) {
474 auto dconn = handler_->get_downstream_connection(rv, downstream);
477 rv = redirect_to_https(downstream);
479 rv = error_reply(downstream, 502);
482 rst_stream(downstream, NGHTTP2_INTERNAL_ERROR);
485 downstream->set_request_state(DownstreamState::CONNECT_FAIL);
486 downstream_queue_.mark_failure(downstream);
494 rv = downstream->attach_downstream_connection(std::move(dconn));
504 if (mruby_ctx->run_on_request_proc(downstream) != 0) {
505 if (error_reply(downstream, 500) != 0) {
506 rst_stream(downstream, NGHTTP2_INTERNAL_ERROR);
509 downstream_queue_.mark_failure(downstream);
514 if (downstream->get_response_state() == DownstreamState::MSG_COMPLETE) {
520 rv = downstream->push_request_headers();
523 if (error_reply(downstream, 502) != 0) {
524 rst_stream(downstream, NGHTTP2_INTERNAL_ERROR);
527 downstream_queue_.mark_failure(downstream);
532 downstream_queue_.mark_active(downstream);
534 auto &req = downstream->request();
536 rv = downstream->end_upload_data();
538 rst_stream(downstream, NGHTTP2_INTERNAL_ERROR);
556 auto downstream = static_cast<Downstream *>(
558 if (!downstream) {
563 downstream->disable_upstream_rtimer();
565 if (downstream->end_upload_data() != 0) {
566 if (downstream->get_response_state() != DownstreamState::MSG_COMPLETE) {
567 upstream->rst_stream(downstream, NGHTTP2_INTERNAL_ERROR);
571 downstream->set_request_state(DownstreamState::MSG_COMPLETE);
577 auto downstream = static_cast<Downstream *>(
579 if (!downstream) {
584 downstream->reset_upstream_rtimer();
588 return upstream->on_request_headers(downstream, frame);
592 downstream->disable_upstream_rtimer();
594 if (downstream->end_upload_data() != 0) {
595 if (downstream->get_response_state() != DownstreamState::MSG_COMPLETE) {
596 upstream->rst_stream(downstream, NGHTTP2_INTERNAL_ERROR);
600 downstream->set_request_state(DownstreamState::MSG_COMPLETE);
633 auto downstream = static_cast<Downstream *>(
636 if (!downstream) {
644 downstream->reset_upstream_rtimer();
646 if (downstream->push_upload_data_chunk(data, len) != 0) {
647 if (downstream->get_response_state() != DownstreamState::MSG_COMPLETE) {
648 upstream->rst_stream(downstream, NGHTTP2_INTERNAL_ERROR);
679 auto downstream = static_cast<Downstream *>(
682 if (!downstream) {
687 if (downstream->get_upgraded() ||
692 << (downstream->get_upgraded() ? "tunneled " : "")
693 << "stream stream_id=" << downstream->get_stream_id()
697 upstream->rst_stream(downstream, NGHTTP2_NO_ERROR);
711 // In case of push from backend, downstream object was already
770 // downstream is in pending queue.
823 auto downstream = static_cast<Downstream *>(
825 if (downstream) {
826 upstream->rst_stream(downstream, NGHTTP2_INTERNAL_ERROR);
841 auto downstream = static_cast<Downstream *>(source->ptr);
842 auto upstream = static_cast<Http2Upstream *>(downstream->get_upstream());
843 auto body = downstream->get_response_buf();
860 downstream->disable_upstream_wtimer();
862 downstream->reset_upstream_wtimer();
865 if (length > 0 && downstream->resume_read(SHRPX_NO_BUFFER, length) != 0) {
871 downstream->response_sent_body_length += length;
1181 // After this function call, downstream may be deleted.
1251 auto downstream = dconn->get_downstream();
1253 if (downstream->get_response_state() == DownstreamState::MSG_RESET) {
1254 // The downstream stream was reset (canceled). In this case,
1255 // RST_STREAM to the upstream and delete downstream connection
1256 // here. Deleting downstream will be taken place at
1258 rst_stream(downstream,
1260 downstream->get_response_rst_stream_error_code()));
1261 downstream->pop_downstream_connection();
1264 } else if (downstream->get_response_state() ==
1266 if (error_reply(downstream, 502) != 0) {
1269 downstream->pop_downstream_connection();
1273 auto rv = downstream->on_read();
1275 if (downstream->get_request_header_sent()) {
1281 downstream->pop_downstream_connection();
1294 if (downstream->can_detach_downstream_connection()) {
1296 downstream->detach_downstream_connection();
1302 // At this point, downstream may be deleted.
1320 auto downstream = dconn->get_downstream();
1323 DCLOG(INFO, dconn) << "EOF. stream_id=" << downstream->get_stream_id();
1326 // Delete downstream connection. If we don't delete it here, it will
1328 downstream->pop_downstream_connection();
1331 // downstream will be deleted in on_stream_close_callback.
1332 if (downstream->get_response_state() == DownstreamState::HEADER_COMPLETE) {
1337 downstream->set_response_state(DownstreamState::MSG_COMPLETE);
1343 on_downstream_body_complete(downstream);
1344 } else if (downstream->get_response_state() !=
1347 // on_stream_close_callback delete downstream.
1348 if (error_reply(downstream, 502) != 0) {
1353 // At this point, downstream may be deleted.
1358 auto downstream = dconn->get_downstream();
1366 if (downstream->get_upgraded()) {
1371 // Delete downstream connection. If we don't delete it here, it will
1373 downstream->pop_downstream_connection();
1377 if (downstream->get_response_state() == DownstreamState::MSG_COMPLETE) {
1381 if (downstream->get_upgraded()) {
1382 rst_stream(downstream, NGHTTP2_NO_ERROR);
1385 if (downstream->get_response_state() == DownstreamState::HEADER_COMPLETE) {
1386 if (downstream->get_upgraded()) {
1387 on_downstream_body_complete(downstream);
1389 rst_stream(downstream, NGHTTP2_INTERNAL_ERROR);
1394 if (downstream->get_request_header_sent()) {
1402 if (error_reply(downstream, status) != 0) {
1406 downstream->set_response_state(DownstreamState::MSG_COMPLETE);
1409 // At this point, downstream may be deleted.
1413 int Http2Upstream::rst_stream(Downstream *downstream, uint32_t error_code) {
1415 ULOG(INFO, this) << "RST_STREAM stream_id=" << downstream->get_stream_id()
1420 downstream->get_stream_id(), error_code);
1445 auto downstream = static_cast<Downstream *>(source->ptr);
1446 auto body = downstream->get_response_buf();
1450 const auto &resp = downstream->response();
1473 downstream->get_response_state() == DownstreamState::MSG_COMPLETE) {
1477 if (!downstream->get_upgraded()) {
1499 downstream->disable_upstream_wtimer();
1507 int Http2Upstream::send_reply(Downstream *downstream, const uint8_t *body,
1514 data_prd.source.ptr = downstream;
1519 const auto &resp = downstream->response();
1523 auto &balloc = downstream->get_block_allocator();
1558 rv = nghttp2_submit_response(session_, downstream->get_stream_id(),
1566 auto buf = downstream->get_response_buf();
1570 downstream->set_response_state(DownstreamState::MSG_COMPLETE);
1573 downstream->reset_upstream_wtimer();
1579 int Http2Upstream::error_reply(Downstream *downstream,
1582 auto &resp = downstream->response();
1584 auto &balloc = downstream->get_block_allocator();
1588 auto body = downstream->get_response_buf();
1590 downstream->set_response_state(DownstreamState::MSG_COMPLETE);
1593 data_prd.source.ptr = downstream;
1610 rv = nghttp2_submit_response(session_, downstream->get_stream_id(),
1618 downstream->reset_upstream_wtimer();
1624 std::unique_ptr<Downstream> downstream) {
1625 downstream_queue_.add_pending(std::move(downstream));
1628 void Http2Upstream::remove_downstream(Downstream *downstream) {
1629 if (downstream->accesslog_ready()) {
1630 handler_->write_accesslog(downstream);
1633 nghttp2_session_set_stream_user_data(session_, downstream->get_stream_id(),
1636 auto next_downstream = downstream_queue_.remove_and_get_blocked(downstream);
1643 // There is no downstream at the moment. Start idle timer now.
1649 // nghttp2_session_recv. These calls may delete downstream.
1650 int Http2Upstream::on_downstream_header_complete(Downstream *downstream) {
1653 const auto &req = downstream->request();
1654 auto &resp = downstream->response();
1656 auto &balloc = downstream->get_block_allocator();
1659 if (downstream->get_non_final_response()) {
1660 DLOG(INFO, downstream) << "HTTP non-final response header";
1662 DLOG(INFO, downstream) << "HTTP response header completed";
1670 downstream->rewrite_location_response_header(req.scheme);
1674 if (!downstream->get_non_final_response()) {
1675 auto dconn = downstream->get_downstream_connection();
1680 if (dmruby_ctx->run_on_response_proc(downstream) != 0) {
1681 if (error_reply(downstream, 500) != 0) {
1688 if (downstream->get_response_state() == DownstreamState::MSG_COMPLETE) {
1696 if (mruby_ctx->run_on_response_proc(downstream) != 0) {
1697 if (error_reply(downstream, 500) != 0) {
1704 if (downstream->get_response_state() == DownstreamState::MSG_COMPLETE) {
1728 !config->http2_proxy && (downstream->get_stream_id() % 2) &&
1730 (downstream->get_non_final_response() || resp.http_status == 200) &&
1733 if (prepare_push_promise(downstream) != 0) {
1744 if (downstream->get_non_final_response()) {
1753 log_response_headers(downstream, nva);
1757 downstream->get_stream_id(), nullptr,
1793 if (!req.regular_connect_method() || !downstream->get_upgraded()) {
1794 auto affinity_cookie = downstream->get_affinity_cookie_to_send();
1796 auto dconn = downstream->get_downstream_connection();
1846 if (downstream->get_stream_id() % 2 == 0) {
1853 log_response_headers(downstream, nva);
1862 data_prd.source.ptr = downstream;
1867 if (downstream->expect_response_body() ||
1868 downstream->expect_response_trailer()) {
1874 rv = nghttp2_submit_response(session_, downstream->get_stream_id(),
1882 downstream->reset_upstream_wtimer();
1889 // nghttp2_session_recv. These calls may delete downstream.
1890 int Http2Upstream::on_downstream_body(Downstream *downstream,
1893 auto body = downstream->get_response_buf();
1897 nghttp2_session_resume_data(session_, downstream->get_stream_id());
1899 downstream->ensure_upstream_wtimer();
1906 // nghttp2_session_recv. These calls may delete downstream.
1907 int Http2Upstream::on_downstream_body_complete(Downstream *downstream) {
1909 DLOG(INFO, downstream) << "HTTP response completed";
1912 auto &resp = downstream->response();
1914 if (!downstream->validate_response_recv_body_length()) {
1915 rst_stream(downstream, NGHTTP2_PROTOCOL_ERROR);
1920 nghttp2_session_resume_data(session_, downstream->get_stream_id());
1921 downstream->ensure_upstream_wtimer();
1930 int Http2Upstream::resume_read(IOCtrlReason reason, Downstream *downstream,
1933 if (consume(downstream->get_stream_id(), consumed) != 0) {
1937 auto &req = downstream->request();
1946 int Http2Upstream::on_downstream_abort_request(Downstream *downstream,
1950 rv = error_reply(downstream, status_code);
1961 Downstream *downstream) {
1964 rv = redirect_to_https(downstream);
1973 int Http2Upstream::redirect_to_https(Downstream *downstream) {
1974 auto &req = downstream->request();
1976 return error_reply(downstream, 400);
1981 return error_reply(downstream, 400);
1984 auto &balloc = downstream->get_block_allocator();
1998 auto &resp = downstream->response();
2003 return send_reply(downstream, nullptr, 0);
2027 Downstream *downstream, const std::vector<nghttp2_nv> &nva) const {
2034 << downstream->get_stream_id() << "\n"
2038 int Http2Upstream::on_timeout(Downstream *downstream) {
2041 << downstream->get_stream_id();
2044 rst_stream(downstream, NGHTTP2_INTERNAL_ERROR);
2059 int Http2Upstream::on_downstream_reset(Downstream *downstream, bool no_retry) {
2062 if (downstream->get_dispatch_state() != DispatchState::ACTIVE) {
2067 downstream->pop_downstream_connection();
2073 if (!downstream->request_submission_ready()) {
2074 if (downstream->get_response_state() == DownstreamState::MSG_COMPLETE) {
2076 downstream->pop_downstream_connection();
2080 rst_stream(downstream, NGHTTP2_INTERNAL_ERROR);
2081 downstream->pop_downstream_connection();
2088 downstream->pop_downstream_connection();
2090 downstream->add_retry();
2096 if (no_retry || downstream->no_more_retry()) {
2100 // downstream connection is clean; we can retry with new
2101 // downstream connection.
2104 auto dconn = handler_->get_downstream_connection(rv, downstream);
2109 rv = downstream->attach_downstream_connection(std::move(dconn));
2115 rv = downstream->push_request_headers();
2124 rv = on_downstream_abort_request_with_https_redirect(downstream);
2126 rv = on_downstream_abort_request(downstream, 502);
2129 rst_stream(downstream, NGHTTP2_INTERNAL_ERROR);
2131 downstream->pop_downstream_connection();
2138 int Http2Upstream::prepare_push_promise(Downstream *downstream) {
2141 const auto &req = downstream->request();
2142 auto &resp = downstream->response();
2149 auto &balloc = downstream->get_block_allocator();
2176 rv = submit_push_promise(scheme, authority, path, downstream);
2190 Downstream *downstream) {
2191 const auto &req = downstream->request();
2222 session_, NGHTTP2_FLAG_NONE, downstream->get_stream_id(), nva.data(),
2258 int Http2Upstream::initiate_push(Downstream *downstream, const StringRef &uri) {
2262 (downstream->get_stream_id() % 2) == 0) {
2266 const auto &req = downstream->request();
2273 auto &balloc = downstream->get_block_allocator();
2291 auto &resp = downstream->response();
2297 rv = submit_push_promise(scheme, authority, path, downstream);
2323 Http2Upstream::on_downstream_push_promise(Downstream *downstream,
2333 promised_downstream->set_assoc_stream_id(downstream->get_stream_id());
2351 Downstream *downstream, Downstream *promised_downstream) {
2364 session_, NGHTTP2_FLAG_NONE, downstream->get_stream_id(), nva.data(),