Skip to content

Commit

Permalink
Add more WebTransport negotiation options
Browse files Browse the repository at this point in the history
Summary:
1. Update the code point for WEBTRANSPORT_MAX_SESSIONS to draft-08 version
2. Any non-zero value for MAX_SESSIONS is an enablement signal
3. If a client sends a WT CONNECT, treat that as an enablement signal

Reviewed By: hanidamlaj

Differential Revision: D53477354

fbshipit-source-id: 418acc210a2c4ee854a624ba6046d9beef93cbd1
  • Loading branch information
afrind authored and facebook-github-bot committed Jul 31, 2024
1 parent 7efeb3f commit f921454
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 1 deletion.
2 changes: 1 addition & 1 deletion proxygen/lib/http/codec/SettingsId.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ enum class SettingsId : uint64_t {
_HQ_DATAGRAM_DRAFT_8 = HQ_SETTINGS_MASK | 0xffd277,
_HQ_DATAGRAM_RFC = HQ_SETTINGS_MASK | 0x33,
ENABLE_WEBTRANSPORT = 0x2b603742,
WEBTRANSPORT_MAX_SESSIONS = 0x2b603743
WEBTRANSPORT_MAX_SESSIONS = 0xc671706a
};

using SettingPair = std::pair<SettingsId, uint32_t>;
Expand Down
8 changes: 8 additions & 0 deletions proxygen/lib/http/session/HQSession.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1538,6 +1538,9 @@ void HQSession::applySettings(const SettingsList& settings) {
supportsWebTransport_.set(folly::to_underlying(SettingEnabled::PEER));
break;
case hq::SettingId::WEBTRANSPORT_MAX_SESSIONS:
hasWT = setting.value > 0;
VLOG(3) << "Peer sent WEBTRANSPORT_MAX_SESSIONS: " << uint32_t(hasWT);
supportsWebTransport_.set(folly::to_underlying(SettingEnabled::PEER));
break;
}
}
Expand Down Expand Up @@ -2559,6 +2562,11 @@ void HQSession::HQStreamTransportBase::onHeadersComplete(
observer->requestStarted(observed, event);
});
}
if (WebTransport::isConnectMessage(*msg)) {
VLOG(3) << "Peer sent WT Connect";
session_.supportsWebTransport_.set(
folly::to_underlying(SettingEnabled::PEER));
}
}

if (!txn_.getHandler()) {
Expand Down
37 changes: 37 additions & 0 deletions proxygen/lib/http/session/test/HQDownstreamSessionTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3354,3 +3354,40 @@ INSTANTIATE_TEST_SUITE_P(HQDownstreamSessionTest,
return tp;
}()),
paramsToTestName);

class HQDownstreamSessionTestWebTransport : public HQDownstreamSessionTest {};

TEST_P(HQDownstreamSessionTestWebTransport, WTRequestNegotiates) {
HTTPMessage req;
req.setHTTPVersion(1, 1);
req.setUpgradeProtocol("webtransport");
req.setMethod(HTTPMethod::CONNECT);
req.setURL("/webtransport");
req.getHeaders().set(HTTP_HEADER_HOST, "www.facebook.com");
auto sessionId = sendRequest(req, false);
auto handler = addSimpleStrictHandler();
handler->expectHeaders();
flushRequestsAndLoopN(3);

HTTPMessage resp;
resp.setStatusCode(200);
handler->txn_->sendHeaders(resp);
EXPECT_NE(handler->txn_->getWebTransport(), nullptr);
handler->sendEOM();
handler->expectEOM();
handler->expectDetachTransaction();
socketDriver_->addReadEOF(sessionId, std::chrono::milliseconds(0));
hqSession_->closeWhenIdle();
flushRequestsAndLoop();
}

INSTANTIATE_TEST_SUITE_P(HQDownstreamSessionTest,
HQDownstreamSessionTestWebTransport,
Values([] {
TestParams tp;
tp.alpn_ = "h3";
tp.shouldSendSettings_ = false;
tp.webTransport_ = true;
return tp;
}()),
paramsToTestName);

0 comments on commit f921454

Please sign in to comment.