Skip to content

Commit

Permalink
fixup! revert read path
Browse files Browse the repository at this point in the history
  • Loading branch information
tatsuhiro-t committed May 19, 2024
1 parent b23a73e commit 539e029
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 29 deletions.
3 changes: 1 addition & 2 deletions src/shrpx_connection_handler.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1279,8 +1279,7 @@ int ConnectionHandler::quic_ipc_read() {

// Ignore return value
quic_conn_handler->handle_packet(faddr, pkt->remote_addr, pkt->local_addr,
pkt->pi, pkt->data.data(),
pkt->data.size());
pkt->pi, pkt->data);

return 0;
}
Expand Down
41 changes: 19 additions & 22 deletions src/shrpx_quic_connection_handler.cc
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,12 @@ int QUICConnectionHandler::handle_packet(const UpstreamAddr *faddr,
const Address &remote_addr,
const Address &local_addr,
const ngtcp2_pkt_info &pi,
const uint8_t *data, size_t datalen) {
std::span<const uint8_t> data) {
int rv;
ngtcp2_version_cid vc;

rv = ngtcp2_pkt_decode_version_cid(&vc, data, datalen, SHRPX_QUIC_SCIDLEN);
rv = ngtcp2_pkt_decode_version_cid(&vc, data.data(), data.size(),
SHRPX_QUIC_SCIDLEN);
switch (rv) {
case 0:
break;
Expand Down Expand Up @@ -97,7 +98,7 @@ int QUICConnectionHandler::handle_packet(const UpstreamAddr *faddr,
if (cwit != std::end(close_waits_)) {
auto cw = (*cwit).second;

cw->handle_packet(faddr, remote_addr, local_addr, pi, {data, datalen});
cw->handle_packet(faddr, remote_addr, local_addr, pi, data);

return 0;
}
Expand All @@ -114,8 +115,7 @@ int QUICConnectionHandler::handle_packet(const UpstreamAddr *faddr,
if (cwit != std::end(close_waits_)) {
auto cw = (*cwit).second;

cw->handle_packet(faddr, remote_addr, local_addr, pi,
{data, datalen});
cw->handle_packet(faddr, remote_addr, local_addr, pi, data);

return 0;
}
Expand Down Expand Up @@ -146,8 +146,7 @@ int QUICConnectionHandler::handle_packet(const UpstreamAddr *faddr,
decrypted_dcid.worker);
if (quic_lwp) {
if (conn_handler->forward_quic_packet_to_lingering_worker_process(
quic_lwp, remote_addr, local_addr, pi, {data, datalen}) ==
0) {
quic_lwp, remote_addr, local_addr, pi, data) == 0) {
return 0;
}

Expand All @@ -174,7 +173,7 @@ int QUICConnectionHandler::handle_packet(const UpstreamAddr *faddr,
std::span<const uint8_t> token;
ngtcp2_token_type token_type = NGTCP2_TOKEN_TYPE_UNKNOWN;

switch (ngtcp2_accept(&hd, data, datalen)) {
switch (ngtcp2_accept(&hd, data.data(), data.size())) {
case 0: {
// If we get Initial and it has the Worker ID of this worker, it
// is likely that client is intentionally use the prefix. Just
Expand All @@ -198,15 +197,15 @@ int QUICConnectionHandler::handle_packet(const UpstreamAddr *faddr,
if (worker_->get_graceful_shutdown()) {
send_connection_close(faddr, hd.version, hd.dcid, hd.scid, remote_addr,
local_addr, NGTCP2_CONNECTION_REFUSED,
datalen * 3);
data.size() * 3);
return 0;
}

if (hd.tokenlen == 0) {
if (quicconf.upstream.require_token) {
send_retry(faddr, vc.version, {vc.dcid, vc.dcidlen},
{vc.scid, vc.scidlen}, remote_addr, local_addr,
datalen * 3);
data.size() * 3);

return 0;
}
Expand Down Expand Up @@ -237,7 +236,7 @@ int QUICConnectionHandler::handle_packet(const UpstreamAddr *faddr,
// with INVALID_TOKEN.
send_connection_close(faddr, hd.version, hd.dcid, hd.scid,
remote_addr, local_addr, NGTCP2_INVALID_TOKEN,
datalen * 3);
data.size() * 3);
return 0;
}

Expand Down Expand Up @@ -268,7 +267,7 @@ int QUICConnectionHandler::handle_packet(const UpstreamAddr *faddr,
if (quicconf.upstream.require_token) {
send_retry(faddr, vc.version, {vc.dcid, vc.dcidlen},
{vc.scid, vc.scidlen}, remote_addr, local_addr,
datalen * 3);
data.size() * 3);

return 0;
}
Expand All @@ -289,7 +288,7 @@ int QUICConnectionHandler::handle_packet(const UpstreamAddr *faddr,
if (quicconf.upstream.require_token) {
send_retry(faddr, vc.version, {vc.dcid, vc.dcidlen},
{vc.scid, vc.scidlen}, remote_addr, local_addr,
datalen * 3);
data.size() * 3);

return 0;
}
Expand All @@ -311,7 +310,7 @@ int QUICConnectionHandler::handle_packet(const UpstreamAddr *faddr,
if (quicconf.upstream.require_token) {
send_retry(faddr, vc.version, {vc.dcid, vc.dcidlen},
{vc.scid, vc.scidlen}, remote_addr, local_addr,
datalen * 3);
data.size() * 3);

return 0;
}
Expand All @@ -324,15 +323,14 @@ int QUICConnectionHandler::handle_packet(const UpstreamAddr *faddr,
default:
if (!(data[0] & 0x80) && vc.dcidlen == SHRPX_QUIC_SCIDLEN &&
decrypted_dcid.worker != worker_->get_worker_id()) {
if (!config->single_thread &&
conn_handler->forward_quic_packet(faddr, remote_addr, local_addr,
pi, decrypted_dcid.worker,
{data, datalen}) == 0) {
if (!config->single_thread && conn_handler->forward_quic_packet(
faddr, remote_addr, local_addr, pi,
decrypted_dcid.worker, data) == 0) {
return 0;
}

if (datalen >= SHRPX_QUIC_SCIDLEN + 22) {
send_stateless_reset(faddr, datalen, {vc.dcid, vc.dcidlen},
if (data.size() >= SHRPX_QUIC_SCIDLEN + 22) {
send_stateless_reset(faddr, data.size(), {vc.dcid, vc.dcidlen},
remote_addr, local_addr);
}
}
Expand All @@ -349,8 +347,7 @@ int QUICConnectionHandler::handle_packet(const UpstreamAddr *faddr,
handler = (*it).second;
}

if (handler->read_quic(faddr, remote_addr, local_addr, pi, {data, datalen}) !=
0) {
if (handler->read_quic(faddr, remote_addr, local_addr, pi, data) != 0) {
delete handler;
return 0;
}
Expand Down
2 changes: 1 addition & 1 deletion src/shrpx_quic_connection_handler.h
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ class QUICConnectionHandler {
~QUICConnectionHandler();
int handle_packet(const UpstreamAddr *faddr, const Address &remote_addr,
const Address &local_addr, const ngtcp2_pkt_info &pi,
const uint8_t *data, size_t datalen);
std::span<const uint8_t> data);
// Send Retry packet. |ini_dcid| is the destination Connection ID
// which appeared in Client Initial packet. |ini_scid| is the
// source Connection ID which appeared in Client Initial packet.
Expand Down
2 changes: 1 addition & 1 deletion src/shrpx_quic_listener.cc
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ void QUICListener::on_read() {
remote_addr.len = msg.msg_namelen;

quic_conn_handler->handle_packet(faddr_, remote_addr, local_addr, pi,
data, datalen);
{data, datalen});

nread -= datalen;
if (nread == 0) {
Expand Down
6 changes: 3 additions & 3 deletions src/shrpx_worker.cc
Original file line number Diff line number Diff line change
Expand Up @@ -555,9 +555,9 @@ void Worker::process_events() {
faddr = &quic_upstream_addrs_[wev.quic_pkt->upstream_addr_index];
}

quic_conn_handler_.handle_packet(
faddr, wev.quic_pkt->remote_addr, wev.quic_pkt->local_addr,
wev.quic_pkt->pi, wev.quic_pkt->data.data(), wev.quic_pkt->data.size());
quic_conn_handler_.handle_packet(faddr, wev.quic_pkt->remote_addr,
wev.quic_pkt->local_addr, wev.quic_pkt->pi,
wev.quic_pkt->data);

break;
}
Expand Down

0 comments on commit 539e029

Please sign in to comment.