Skip to content

Commit 5f795e3

Browse files
Zale Youngmeta-codesync[bot]
authored andcommitted
Add CachedServerTransportParameters serialization utilities
Summary: Extract readCachedServerTransportParameters and writeCachedServerTransportParameters functions into a shared utility that can be used by both proxygen's PersistentQuicPskCache and the new Fizz MNS QUIC integration. Reviewed By: lhuang04 Differential Revision: D91170956 fbshipit-source-id: 346e589b6f530e8ed6fb32dc1f6fc51315f897bb
1 parent b5d0f0d commit 5f795e3

5 files changed

Lines changed: 182 additions & 0 deletions

File tree

quic/client/BUCK

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,24 @@ mvfst_cpp_library(
134134
],
135135
)
136136

137+
mvfst_cpp_library(
138+
name = "cached_server_tp_serialization",
139+
srcs = [
140+
"handshake/CachedServerTransportParametersSerialization.cpp",
141+
],
142+
headers = [
143+
"handshake/CachedServerTransportParametersSerialization.h",
144+
],
145+
deps = [
146+
"//fizz/record:record",
147+
],
148+
exported_deps = [
149+
":cached_server_tp",
150+
"//folly:range",
151+
"//folly/io:iobuf",
152+
],
153+
)
154+
137155
mvfst_cpp_library(
138156
name = "client_async_transport",
139157
srcs = [

quic/client/CMakeLists.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,17 @@ mvfst_add_library(mvfst_client_cached_server_tp
104104
mvfst_constants
105105
)
106106

107+
mvfst_add_library(mvfst_client_cached_server_tp_serialization
108+
SRCS
109+
handshake/CachedServerTransportParametersSerialization.cpp
110+
DEPS
111+
fizz::fizz
112+
EXPORTED_DEPS
113+
mvfst_client_cached_server_tp
114+
Folly::folly_io_iobuf
115+
Folly::folly_range
116+
)
117+
107118
mvfst_add_library(mvfst_client_client_async_transport
108119
SRCS
109120
QuicClientAsyncTransport.cpp
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
/*
2+
* Copyright (c) Meta Platforms, Inc. and affiliates.
3+
*
4+
* This source code is licensed under the MIT license found in the
5+
* LICENSE file in the root directory of this source tree.
6+
*/
7+
8+
#include <quic/client/handshake/CachedServerTransportParametersSerialization.h>
9+
10+
#include <fizz/record/Types.h>
11+
12+
namespace quic {
13+
14+
void writeCachedServerTransportParameters(
15+
const CachedServerTransportParameters& params,
16+
folly::io::Appender& appender) {
17+
fizz::detail::write(params.idleTimeout, appender);
18+
fizz::detail::write(params.maxRecvPacketSize, appender);
19+
fizz::detail::write(params.initialMaxData, appender);
20+
fizz::detail::write(params.initialMaxStreamDataBidiLocal, appender);
21+
fizz::detail::write(params.initialMaxStreamDataBidiRemote, appender);
22+
fizz::detail::write(params.initialMaxStreamDataUni, appender);
23+
fizz::detail::write(params.initialMaxStreamsBidi, appender);
24+
fizz::detail::write(params.initialMaxStreamsUni, appender);
25+
uint8_t knobSupport = params.knobFrameSupport ? 1 : 0;
26+
fizz::detail::write(knobSupport, appender);
27+
uint8_t ackReceiveTimestampsEnabled =
28+
params.ackReceiveTimestampsEnabled ? 1 : 0;
29+
fizz::detail::write(ackReceiveTimestampsEnabled, appender);
30+
fizz::detail::write(params.maxReceiveTimestampsPerAck, appender);
31+
fizz::detail::write(params.receiveTimestampsExponent, appender);
32+
fizz::detail::write(params.extendedAckFeatures, appender);
33+
}
34+
35+
void readCachedServerTransportParameters(
36+
folly::io::Cursor& cursor,
37+
CachedServerTransportParameters& params) {
38+
fizz::detail::read(params.idleTimeout, cursor);
39+
fizz::detail::read(params.maxRecvPacketSize, cursor);
40+
fizz::detail::read(params.initialMaxData, cursor);
41+
fizz::detail::read(params.initialMaxStreamDataBidiLocal, cursor);
42+
fizz::detail::read(params.initialMaxStreamDataBidiRemote, cursor);
43+
fizz::detail::read(params.initialMaxStreamDataUni, cursor);
44+
fizz::detail::read(params.initialMaxStreamsBidi, cursor);
45+
fizz::detail::read(params.initialMaxStreamsUni, cursor);
46+
uint8_t knobFrameSupport;
47+
fizz::detail::read(knobFrameSupport, cursor);
48+
params.knobFrameSupport = knobFrameSupport > 0;
49+
uint8_t ackReceiveTimestampsEnabled;
50+
fizz::detail::read(ackReceiveTimestampsEnabled, cursor);
51+
params.ackReceiveTimestampsEnabled = ackReceiveTimestampsEnabled > 0;
52+
fizz::detail::read(params.maxReceiveTimestampsPerAck, cursor);
53+
fizz::detail::read(params.receiveTimestampsExponent, cursor);
54+
fizz::detail::read(params.extendedAckFeatures, cursor);
55+
}
56+
57+
std::unique_ptr<folly::IOBuf> serializeCachedServerTransportParameters(
58+
const CachedServerTransportParameters& params) {
59+
auto buf = folly::IOBuf::create(0);
60+
folly::io::Appender appender(buf.get(), 512);
61+
writeCachedServerTransportParameters(params, appender);
62+
return buf;
63+
}
64+
65+
bool deserializeCachedServerTransportParameters(
66+
folly::ByteRange data,
67+
CachedServerTransportParameters& params) {
68+
if (data.empty()) {
69+
return false;
70+
}
71+
72+
try {
73+
auto buf = folly::IOBuf::wrapBuffer(data);
74+
folly::io::Cursor cursor(buf.get());
75+
readCachedServerTransportParameters(cursor, params);
76+
return true;
77+
} catch (const std::exception&) {
78+
return false;
79+
}
80+
}
81+
82+
} // namespace quic
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
/*
2+
* Copyright (c) Meta Platforms, Inc. and affiliates.
3+
*
4+
* This source code is licensed under the MIT license found in the
5+
* LICENSE file in the root directory of this source tree.
6+
*/
7+
8+
#pragma once
9+
10+
#include <quic/client/handshake/CachedServerTransportParameters.h>
11+
12+
#include <folly/Range.h>
13+
#include <folly/io/Cursor.h>
14+
#include <folly/io/IOBuf.h>
15+
16+
namespace quic {
17+
18+
/**
19+
* Serializes CachedServerTransportParameters to an appender.
20+
*
21+
* This allows the caller to continue writing additional data after
22+
* the transport parameters (e.g., appParams in proxygen).
23+
*
24+
* @param params The transport parameters to serialize.
25+
* @param appender The appender to write to.
26+
*/
27+
void writeCachedServerTransportParameters(
28+
const CachedServerTransportParameters& params,
29+
folly::io::Appender& appender);
30+
31+
/**
32+
* Deserializes CachedServerTransportParameters from a cursor.
33+
*
34+
* This allows the caller to continue reading additional data after
35+
* the transport parameters (e.g., appParams in proxygen).
36+
*
37+
* @param cursor The cursor to read from.
38+
* @param params The output CachedServerTransportParameters struct.
39+
*/
40+
void readCachedServerTransportParameters(
41+
folly::io::Cursor& cursor,
42+
CachedServerTransportParameters& params);
43+
44+
/**
45+
* Serializes CachedServerTransportParameters to a new IOBuf.
46+
*
47+
* Convenience wrapper around writeCachedServerTransportParameters.
48+
*
49+
* @param params The transport parameters to serialize.
50+
* @return A unique_ptr to an IOBuf containing the serialized data.
51+
*/
52+
std::unique_ptr<folly::IOBuf> serializeCachedServerTransportParameters(
53+
const CachedServerTransportParameters& params);
54+
55+
/**
56+
* Deserializes CachedServerTransportParameters from binary data.
57+
*
58+
* Convenience wrapper around readCachedServerTransportParameters.
59+
*
60+
* @param data The binary data to deserialize.
61+
* @param params The output CachedServerTransportParameters struct.
62+
* @return true if deserialization succeeded, false otherwise.
63+
*/
64+
bool deserializeCachedServerTransportParameters(
65+
folly::ByteRange data,
66+
CachedServerTransportParameters& params);
67+
68+
} // namespace quic

quic/congestion_control/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ mvfst_add_library(mvfst_congestion_control_newreno
9696
DEPS
9797
mvfst_common_mvfst_logging
9898
mvfst_congestion_control_congestion_control_functions
99+
mvfst_logging_qlogger_constants
99100
mvfst_logging_qlogger_macros
100101
EXPORTED_DEPS
101102
mvfst_congestion_control_congestion_controller
@@ -111,6 +112,7 @@ mvfst_add_library(mvfst_congestion_control_copa
111112
mvfst_common_mvfst_logging
112113
mvfst_common_time_util
113114
mvfst_congestion_control_congestion_control_functions
115+
mvfst_logging_qlogger_constants
114116
mvfst_logging_qlogger_macros
115117
EXPORTED_DEPS
116118
mvfst_common_optional
@@ -147,6 +149,7 @@ mvfst_add_library(mvfst_congestion_control_bbr2
147149
DEPS
148150
mvfst_common_mvfst_logging
149151
mvfst_congestion_control_congestion_control_functions
152+
mvfst_logging_qlogger_constants
150153
mvfst_logging_qlogger_macros
151154
EXPORTED_DEPS
152155
mvfst_congestion_control_bandwidth

0 commit comments

Comments
 (0)